﻿using Newtonsoft.Json.Linq;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI.WebControls;
using U8WebService.Common;
using static System.Net.Mime.MediaTypeNames;
using UFIDA.U8.U8APIFramework;
using System.Web.Services;
using MSXML2;
using UFIDA.U8.U8MOMAPIFramework;
using SqlKata.Execution;
using U8WebService.Models;
using System.Runtime.InteropServices;
using UFIDA.U8.U8APIFramework.Parameter;
using Dapper;
using System.Web.Configuration;
using static System.Web.Razor.Parser.SyntaxConstants;
using System.Reflection;
using Microsoft.Win32;
using System.IO;

namespace U8WebService.BLL
{
    public partial class U8_WarehouseManagement : WebService
    {
        TxtLogHelper txt = new TxtLogHelper();
        U8_Base loginBase = new U8_Base();
        DbHelper cmd = new DbHelper();

        #region  找不到dll时引用U8安装目录下dll方法
        void Main()
        {
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

            AppDomain.CurrentDomain.ReflectionOnlyAssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);

            AppDomain.CurrentDomain.AssemblyLoad += CurrentDomain_AssemblyLoad;

        }
        private static void CurrentDomain_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
        {
            Console.WriteLine((args.LoadedAssembly).Location);
        }
        public Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            if (args.Name.ToLower().Contains(".resources")) return null;
            string u8InstallPath = Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\UfSoft\WF\V8.700\Install\CurrentInstPath", null, "").ToString();
            string[] probPaths = new string[] {
                @"Interop",
                @"Framework",
                @"UFMOM\U8APIFramework"
            };

            string[] assemblyNameParts = args.Name.Split(new Char[] { ',' }, 2);
            string assemblyName = assemblyNameParts[0] + ".dll";

            for (int idx = 0; idx < probPaths.Length; idx++)
            {
                string _referPath = Path.Combine(u8InstallPath, probPaths[idx]);
                string filePath = Path.Combine(_referPath, assemblyName);
                txt.AddLogMsg("filePath:" + filePath);
                Assembly assembly = null;
                try
                {
                    assembly = Assembly.LoadFrom(filePath);
                    return assembly;
                }
                catch
                {
                }

            }

            return null;
        }

        #endregion


        #region 其他入库
        public ReturnResult otherIn(string jsonStr)
        {
            ReturnResult rsl = new ReturnResult();
            try
            {
                Main();

                txt.AddLogMsg("其他入库单代码开始执行:" + jsonStr);
                var json = JsonConvert.DeserializeObject<JObject>(jsonStr);
                #region 用户登录
                var loMsg = loginBase.CheckLogin(json["System"]["sAccID"].ToString(), json["System"]["sYear"].ToString(), json["System"]["sUserID"].ToString(), json["System"]["sPassword"].ToString(), json["System"]["sDate"].ToString(), json["System"]["sServer"].ToString());
                if (!loMsg.Result)
                {
                    #region 登录失败立即返回结果
                    rsl.Message = loMsg.Message;
                    txt.AddLogMsg("登录失败："+loMsg.Message);
                    return rsl;
                    #endregion
                }
                #endregion

                txt.AddLogMsg("登录成功，开始第二步:" + JsonConvert.SerializeObject(loMsg));
                //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
                U8EnvContext envContext = new U8EnvContext();
                envContext.U8Login = (U8Login.clsLogin)loMsg.Data;

                txt.AddLogMsg("开始第三步");
                //第三步：设置API地址标识(Url)
                U8ApiAddress myApiAddress = new U8ApiAddress("U8API/otherin/Add");

                txt.AddLogMsg(string.Format("开始第四步：{0}", JsonConvert.SerializeObject(myApiAddress)));
                //第四步：构造APIBroker
                U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
                txt.AddLogMsg("开始第五步");
                //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型：08
                broker.AssignNormalValue("sVouchType", "08");


                #region 主表数据
                var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
                txt.AddLogMsg(string.Format("接收的header参数：{0}", json["Head"].ToString()));
                MSXML2.DOMDocument domH = new DOMDocumentClass();
                string path = this.Server.MapPath(@"\");
                domH.load(path + "\\DomXML\\RdRecord08domhead.xml");
                U8APIHelper.FormatDom(ref domH, 1, "A");
                MSXML2.IXMLDOMNodeList domNodesHead = domH.childNodes[0].childNodes[1].childNodes;
                txt.AddLogMsg("开始构建header参数固定值");
                #region 固定值
                domNodesHead[0].attributes.getNamedItem("brdflag").nodeValue = "1";//收发标志
                domNodesHead[0].attributes.getNamedItem("cvouchtype").nodeValue = "08";//单据类型 
                domNodesHead[0].attributes.getNamedItem("cbustype").nodeValue = "其他入库"; //业务类型
                domNodesHead[0].attributes.getNamedItem("csource").nodeValue = "库存";//单据来源
                domNodesHead[0].attributes.getNamedItem("biafirst").nodeValue = "0";
                domNodesHead[0].attributes.getNamedItem("bpufirst").nodeValue = "0";
                domNodesHead[0].attributes.getNamedItem("vt_id").nodeValue = "67";
                domNodesHead[0].attributes.getNamedItem("csysbarcode").nodeValue = "";
                #endregion
                txt.AddLogMsg("开始遍历构建header参数");
                foreach (var obj in header.Properties())
                {
                    domNodesHead[0].attributes.getNamedItem(obj.Name).nodeValue = obj.Value; //解析json，填充数据（主表）

                }
                ((IXMLDOMElement)domNodesHead[0]).setAttribute("bWireless", "1");  //解决WebService生成单据慢问题
                broker.AssignNormalValue("DomHead", domH);


                #endregion
                txt.AddLogMsg(string.Format("参数构建完成{0}", DateTime.Now.ToString()));
                #region 从表数据填充
                var list = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());
                MSXML2.DOMDocument domB = new DOMDocumentClass();
                domB.load(path + "DomXML\\RdRecord08dombody.xml");
                U8APIHelper.AddDomDataRow(ref domB, list.Count, "A");

                for (int i = 0; i < list.Count; i++)
                {
                    MSXML2.IXMLDOMNodeList domNodesBody = domB.childNodes[0].childNodes[1].childNodes;
                    domNodesBody[i].attributes.getNamedItem("irowno").nodeValue = Convert.ToString((i + 1));
                    domNodesBody[i].attributes.getNamedItem("bvmiused").nodeValue = "0";//代管消耗标识
                    domNodesBody[i].attributes.getNamedItem("bcosting").nodeValue = "1";//	是否核算
                    domNodesBody[i].attributes.getNamedItem("iexpiratdatecalcu").nodeValue = "0";
                    domNodesBody[i].attributes.getNamedItem("cbsysbarcode").nodeValue = "";
                    foreach (var j in list[i].Properties())
                    {
                        domNodesBody[i].attributes.getNamedItem(j.Name).nodeValue = j.Value;
                    }
                }
                broker.AssignNormalValue("domBody", domB);
                txt.AddLogMsg(string.Format("表体数据构建{0}", json["List"].ToString()));
                #endregion

                txt.AddLogMsg("数据构建完成");
                //给普通参数domPosition赋值。此参数的数据类型为System.Object，此参数按引用传递，表示货位：传空
                broker.AssignNormalValue("domPosition", null);

                //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

                //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection，此参数按引用传递，表示连接对象,如果由调用方控制事务，则需要设置此连接对象，否则传空
                broker.AssignNormalValue("cnnFrom", null);

                //该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String，此参数按值传递。在API调用返回时，可以通过GetResult("VouchId")获取其值
                broker.AssignNormalValue("VouchId", string.Empty);

                //该参数domMsg为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
                MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
                broker.AssignNormalValue("domMsg", domMsg);

                //给普通参数bCheck赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否控制可用量。
                broker.AssignNormalValue("bCheck", false);

                //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示检查可用量
                broker.AssignNormalValue("bBeforCheckStock", false);

                //给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否红字单据
                if (json["isBlue"].ToString() == "1")
                {
                    broker.AssignNormalValue("bIsRedVouch", false);
                }
                else
                {
                    broker.AssignNormalValue("bIsRedVouch", true);
                }

                //给普通参数sAddedState赋值。此参数的数据类型为System.String，此参数按值传递，表示传空字符串
                broker.AssignNormalValue("sAddedState", string.Empty);

                //给普通参数bReMote赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否远程：转入false
                broker.AssignNormalValue("bReMote", false);
                txt.AddLogMsg("第六步开始调用API");
                #region 第六步：调用API
                if (!broker.Invoke())
                {
                    //错误处理
                    Exception apiEx = broker.GetException();
                    if (apiEx != null)
                    {
                        if (apiEx is MomSysException)
                        {
                            MomSysException sysEx = apiEx as MomSysException;
                            rsl.Message = string.Format("系统异常:{0}", sysEx.Message);
                            //todo:异常处理
                        }
                        else if (apiEx is MomBizException)
                        {
                            MomBizException bizEx = apiEx as MomBizException;
                            rsl.Message = string.Format("API异常：{0}", bizEx.Message);
                            //todo:异常处理
                        }
                        //异常原因
                        String exReason = broker.GetExceptionString();
                        if (exReason.Length != 0)
                        {
                            rsl.Message = string.Format("异常原因：{0}", exReason);
                        }
                    }
                    //结束本次调用，释放API资源
                    broker.Release();
                    return rsl; 
                }
                #endregion

                //第七步：获取返回结果

                //获取返回值
                //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
                txt.AddLogMsg(broker.GetReturnValue().ToString());
                rsl.Result = Convert.ToBoolean(broker.GetReturnValue());

                if (!rsl.Result)
                {
                    //获取普通OUT参数errMsg。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
                    rsl.Message = broker.GetResult("errMsg") as System.String;
                }

                //获取普通INOUT参数VouchId。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
                rsl.Data = broker.GetResult("VouchId") as System.String;
                if (rsl.Result && !string.IsNullOrEmpty(rsl.Data.ToString()))
                {
                    rsl.Data = this.getRdRecord08Code(rsl.Data.ToString());
                }
              


                //结束本次调用，释放API资源
                broker.Release();
                return rsl;

            }
            catch (Exception ex)
            {
                rsl.Message = "异常错误：" + ex.Message;
                txt.AddLogMsg(rsl.Message);
            }
            return rsl;
        }

        private string getRdRecord08Code(string dataKey)
        {
            string sql = "select ccode from RdRecord08 where id=" + dataKey;
            var table = cmd.getData(sql);
            return table.Rows[0]["ccode"].ToString();
        }

        #endregion




    }



    // 产成品入库
    public partial class U8_WarehouseManagement : WebService
    {
        ////接口
        //public ReturnResult FinishedProductStorage(string jsonStr)
        //{
        //    ReturnResult rsl = new ReturnResult();
        //    try
        //    {
        //        txt.AddLogMsg("PE产成品入库单代码开始执行:" + jsonStr);
        //        var json = JsonConvert.DeserializeObject<JObject>(jsonStr);

        //        #region 用户登录
        //        var loMsg = loginBase.CheckLogin(json["System"]["sAccID"].ToString(), json["System"]["sYear"].ToString(), json["System"]["sUserID"].ToString(), json["System"]["sPassword"].ToString(), json["System"]["sDate"].ToString(), json["System"]["sServer"].ToString());
        //        if (!loMsg.Result)
        //        {
        //            #region 登录失败立即返回结果
        //            rsl.Message = loMsg.Message;
        //            return rsl;
        //            #endregion
        //        }
        //        #endregion
        //        txt.AddLogMsg("登录成功，开始第二步:" + JsonConvert.SerializeObject(loMsg));
        //        //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
        //        U8EnvContext envContext = new U8EnvContext();
        //        envContext.U8Login = (U8Login.clsLogin)loMsg.Data;

        //        txt.AddLogMsg("开始第三步");
        //        //第三步：设置API地址标识(Url)

        //        U8ApiAddress myApiAddress = new U8ApiAddress("U8API/ProductIn/Add");

        //        txt.AddLogMsg(string.Format("开始第四步：{0}", JsonConvert.SerializeObject(myApiAddress)));
        //        //第四步：构造APIBroker
        //        U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);
        //        txt.AddLogMsg("开始第五步");
        //        //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型：10
        //        broker.AssignNormalValue("sVouchType", "10");


        //        #region 主表数据
        //        var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        txt.AddLogMsg(string.Format("接收的header参数：{0}", json["Head"].ToString()));
        //        MSXML2.DOMDocument domH = new DOMDocumentClass();
        //        string path = this.Server.MapPath(@"\");
        //        domH.load(path + "\\DomXML\\RdRecord10domhead.xml");
        //        U8APIHelper.FormatDom(ref domH, 1, "A");
        //        MSXML2.IXMLDOMNodeList domNodesHead = domH.childNodes[0].childNodes[1].childNodes;


        //        #region 固定值
        //        domNodesHead[0].attributes.getNamedItem("bomfirst").nodeValue = "0";
        //        domNodesHead[0].attributes.getNamedItem("iswfcontrolled").nodeValue = "0";
        //        domNodesHead[0].attributes.getNamedItem("iverifystate").nodeValue = "0";
        //        domNodesHead[0].attributes.getNamedItem("ireturncount").nodeValue = "0";
        //        domNodesHead[0].attributes.getNamedItem("iproorderid").nodeValue = "0";//生产订单ID

        //        domNodesHead[0].attributes.getNamedItem("biafirst").nodeValue = "0";
        //        domNodesHead[0].attributes.getNamedItem("bpufirst").nodeValue = "0";
        //        domNodesHead[0].attributes.getNamedItem("bisstqc").nodeValue = "0";//库存期初标识
        //        domNodesHead[0].attributes.getNamedItem("vt_id").nodeValue = "63";
        //        domNodesHead[0].attributes.getNamedItem("cbustype").nodeValue = "成品入库"; //业务类型

        //        domNodesHead[0].attributes.getNamedItem("csource").nodeValue = "生产订单";//单据来源
        //        domNodesHead[0].attributes.getNamedItem("cvouchtype").nodeValue = "||st10|2018020283";//单据类型 
        //        domNodesHead[0].attributes.getNamedItem("brdflag").nodeValue = "1";//"0";//收发标志
        //        domNodesHead[0].attributes.getNamedItem("ccode").nodeValue = "2018020283";//入库单号
        //        #endregion

        //        foreach (var obj in header.Properties())
        //        {
        //            domNodesHead[0].attributes.getNamedItem(obj.Name).nodeValue = obj.Value; //解析json，填充数据（主表）
        //        }
        //        ((IXMLDOMElement)domNodesHead[0]).setAttribute("bWireless", "1");  //解决WebService生成单据慢问题
        //        broker.AssignNormalValue("DomHead", domH);

        //        #endregion
        //        txt.AddLogMsg(string.Format("参数构建完成,表头参数：{0}", DateTime.Now.ToString()));
        //        #region 从表数据填充
        //        var list = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());
        //        MSXML2.DOMDocument domB = new DOMDocumentClass();
        //        domB.load(path + "DomXML\\RdRecord10dombody.xml");
        //        U8APIHelper.AddDomDataRow(ref domB, list.Count, "A");

        //        for (int i = 0; i < list.Count; i++)
        //        {

        //            MSXML2.IXMLDOMNodeList domNodesBody = domB.childNodes[0].childNodes[1].childNodes;

        //            domNodesBody[i].attributes.getNamedItem("irowno").nodeValue = Convert.ToString((i + 1));
        //            domNodesBody[i].attributes.getNamedItem("bvmiused").nodeValue = "0";//代管消耗标识
        //            domNodesBody[i].attributes.getNamedItem("bcosting").nodeValue = "1";//	是否核算
        //            domNodesBody[i].attributes.getNamedItem("iordertype").nodeValue = "0";//销售订单类别
        //            domNodesBody[i].attributes.getNamedItem("cdemandmemo").nodeValue = "";//需求分类代号说明
        //            domNodesBody[i].attributes.getNamedItem("isotype").nodeValue = "0";//需求跟踪方式
        //            domNodesBody[i].attributes.getNamedItem("brelated").nodeValue = "0";//是否联副产品

        //            foreach (var j in list[i].Properties())
        //            {
        //                domNodesBody[i].attributes.getNamedItem(j.Name).nodeValue = j.Value;
        //            }
        //        }
        //        broker.AssignNormalValue("domBody", domB);
        //        txt.AddLogMsg(string.Format("表体数据构建,表体参数：{0}", json["List"].ToString()));
        //        #endregion

        //        txt.AddLogMsg("数据构建完成");
        //        //给普通参数domPosition赋值。此参数的数据类型为System.Object，此参数按引用传递，表示货位：传空
        //        broker.AssignNormalValue("domPosition", null);

        //        //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

        //        //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection，此参数按引用传递，表示连接对象,如果由调用方控制事务，则需要设置此连接对象，否则传空
        //        broker.AssignNormalValue("cnnFrom", null);

        //        //该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String，此参数按值传递。在API调用返回时，可以通过GetResult("VouchId")获取其值
        //        broker.AssignNormalValue("VouchId", string.Empty);

        //        //该参数domMsg为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
        //        MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
        //        broker.AssignNormalValue("domMsg", domMsg);

        //        //给普通参数bCheck赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否控制可用量。
        //        broker.AssignNormalValue("bCheck", false);

        //        //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示检查可用量
        //        broker.AssignNormalValue("bBeforCheckStock", false);

        //        //给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否红字单据
        //        if (!json.ContainsKey("isBlue") || json["isBlue"].ToString() == "1")
        //        {
        //            broker.AssignNormalValue("bIsRedVouch", false);
        //        }
        //        else
        //        {
        //            broker.AssignNormalValue("bIsRedVouch", true);
        //        }

        //        //给普通参数sAddedState赋值。此参数的数据类型为System.String，此参数按值传递，表示传空字符串
        //        broker.AssignNormalValue("sAddedState", string.Empty);

        //        //给普通参数bReMote赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否远程：转入false
        //        broker.AssignNormalValue("bReMote", false);
        //        txt.AddLogMsg("第六步开始调用API");
        //        #region 第六步：调用API
        //        if (!broker.Invoke())
        //        {
        //            //错误处理
        //            Exception apiEx = broker.GetException();
        //            if (apiEx != null)
        //            {
        //                if (apiEx is MomSysException)
        //                {
        //                    MomSysException sysEx = apiEx as MomSysException;
        //                    rsl.Message = string.Format("系统异常:{0}", sysEx.Message);
        //                    //todo:异常处理
        //                }
        //                else if (apiEx is MomBizException)
        //                {
        //                    MomBizException bizEx = apiEx as MomBizException;
        //                    rsl.Message = string.Format("API异常：{0}", bizEx.Message);
        //                    //todo:异常处理
        //                }
        //                //异常原因
        //                String exReason = broker.GetExceptionString();
        //                if (exReason.Length != 0)
        //                {
        //                    rsl.Message = string.Format("异常原因：{0}", exReason);
        //                }
        //            }
        //            //结束本次调用，释放API资源
        //            broker.Release();
        //            return rsl; ;
        //        }
        //        #endregion

        //        //第七步：获取返回结果

        //        //获取返回值
        //        //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
        //        txt.AddLogMsg(broker.GetReturnValue().ToString());
        //        rsl.Result = Convert.ToBoolean(broker.GetReturnValue());

        //        if (!rsl.Result)
        //        {
        //            //获取普通OUT参数errMsg。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
        //            rsl.Message = broker.GetResult("errMsg") as System.String;
        //            txt.AddLogMsg("错误信息为：" + rsl.Message);
        //        }
        //        else
        //        {
        //            //获取普通INOUT参数VouchId。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空

        //            var ID = broker.GetResult("VouchId") as System.String;
        //            rsl.Data = Seize_cCode_From_RdRecord10(ID);
        //        }

        //        //结束本次调用，释放API资源
        //        broker.Release();
        //        return rsl;

        //    }
        //    catch (Exception ex)
        //    {
        //        rsl.Message = "异常错误：" + ex.Message;
        //    }
        //    return rsl;
        //}

        ////写库
        //public ReturnResult ProductIn(string jsonStr)
        //{
        //    ReturnResult rsl = new ReturnResult();
        //    try
        //    {
        //        txt.AddLogMsg("产成品入库单（写库）代码开始执行:" + jsonStr);

        //        //执行的sql语句
        //        var sqlList = new List<DbTable>();
        //        var auditSqlList = new List<DbTable>();//审核时的sql语句
        //        var dbTable = new DbTable();
        //        var json = JsonConvert.DeserializeObject<JObject>(jsonStr);

        //        var cNumber = "";//新增后的流水号（单号流水）
        //        var cCode = "";//新增后的单据号
        //        var ID = "";
        //        var AutoID = "";
        //        var u8Db = new Katabase().U8Db();
        //        var cVouchType = "10";

        //        var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        var bodyList = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());

        //        //判断产成品入库单是否需要审核（如果传入了审核人和审核时间就默认为要生成审核状态的产成品入库单）
        //        var isAudit = "";
        //        if (header.Property("chandler") != null && header.Property("dveridate") != null && header.Property("dnverifytime") != null && 
        //            !string.IsNullOrWhiteSpace(header["chandler"].ToString()) && !string.IsNullOrWhiteSpace(header["dveridate"].ToString()) && !string.IsNullOrWhiteSpace(header["dnverifytime"].ToString()) )
        //        {
        //            isAudit = "1";
        //        }

        //        #region VoucherHistory  获取并反写单号，获取id
        //        var whereDic = new Dictionary<string, object>();
        //        var CardNumber = "0411";
        //        U8APIHelper.GetIndex_FromProcedure(1, CardNumber, "rd", out cNumber, out cCode, out ID, out AutoID);
        //        //反写流水号调拨单
        //        if (cNumber.Equals("1"))
        //        {
        //            U8APIHelper.insertcNumber(CardNumber, cNumber, ref sqlList);
        //        }
        //        else
        //        {
        //            whereDic = new Dictionary<string, object>();
        //            whereDic["CardNumber"] = CardNumber;
        //            dbTable = new DbTable();
        //            dbTable.tableName = "VoucherHistory";
        //            dbTable.updateValue = new { cNumber = cNumber };
        //            dbTable.whereDic = whereDic;
        //            dbTable.editType = DbTable.otypes.edit;
        //            sqlList.Add(dbTable);
        //        }
        //        txt.AddLogMsg(string.Format("返回rd的id{0}，autoid{1},CardNumber:{2},cNumber:{3}", ID, AutoID, CardNumber, cNumber));
        //        #endregion

        //        var cWhCode = header["cwhcode"].ToString();
        //        var mes = "";

        //        txt.AddLogMsg("产成品入库单第一步");
        //        #region 创建产成品入库单主表数据
        //        var csysbarcode = "||st10|" + cCode;
        //        var head_names = header.Properties().Select(p => p.Name).ToList();
        //        head_names.Add("cCode");
        //        head_names.Add("ID");
        //        head_names.Add("csysbarcode");
        //        head_names.Add("cDefine11");
        //        head_names.Add("bRdFlag");
        //        head_names.Add("cvouchtype");

        //        var head_values = header.Properties().Select(p => p.Value.ToString()).ToList();
        //        head_values.Add(cCode);
        //        head_values.Add(ID);
        //        head_values.Add(csysbarcode);
        //        head_values.Add("写库");//写库的产成品入库单
        //        head_values.Add("1");
        //        head_values.Add(cVouchType);

        //        var head_list = new List<IEnumerable<string>>
        //        {
        //            head_values
        //        };
               
        //        dbTable = new DbTable();
        //        dbTable.tableName = "rdrecord10";
        //        dbTable.tableColumns = head_names;
        //        dbTable.insertValues = head_list;
        //        dbTable.editType = DbTable.otypes.add;
        //        sqlList.Add(dbTable);

        //        //txt.AddLogMsg(JsonConvert.SerializeObject(dbTable.tableColumns));
        //        //txt.AddLogMsg(JsonConvert.SerializeObject(dbTable.insertValues));
        //        #endregion

        //        txt.AddLogMsg("产成品入库单第二步");
        //        var body_names = bodyList[0].Properties().Select(p => p.Name).ToList();
        //        body_names.Add("ID");
        //        body_names.Add("autoID");
                
        //        var body_list = new List<IEnumerable<string>>();
        //        for (int i = 0; i < bodyList.Count; i++)
        //        {
        //            var body = bodyList[i];
        //            var cinvcode = body["cinvcode"].ToString();
        //            var cfree1 = body["cfree1"].ToString();
        //            var cfree3 = body["cfree3"].ToString();
        //            var number = body["iquantity"].ToString();
        //            var cposition = body["cposition"].ToString();

        //            #region 产成品入库单子表数据
        //            var body_values = body.Properties().Select(p => p.Value.ToString()).ToList();
        //            body_values.Add(ID);
        //            var auto_id = (long.Parse(AutoID) + i).ToString().PadLeft(10, '0');
        //            body_values.Add(auto_id);

        //            body_list.Add(body_values);
        //            #endregion

        //            #region 货位现存量 修改(目前004仓库无货位)
        //            if (!string.IsNullOrWhiteSpace(body["cposition"].ToString()))
        //            {
        //                #region 修改货位现存量数据
        //                var PositionCollection = U8APIHelper.getPositionStock(cinvcode, cWhCode, cfree1, cfree3, cposition);
        //                if (PositionCollection.Count() < 1)
        //                {
        //                    mes = string.Format("未获取到现存量信息,仓库编码:{0}中存货编码:{1}，" +
        //                           "颜色(cFree1):{2},商标(cFree3):{3},货位:{4}的现存量不存在", cWhCode, cinvcode, cfree1, cfree3, cposition);
        //                    txt.AddLogMsg(mes);
        //                    rsl.Message = mes;
        //                    return rsl;
        //                }

        //                var PositionStock = PositionCollection.FirstOrDefault();
        //                if (PositionStock != null)
        //                {
        //                    //现在的结存数量
        //                    var nowIQuantity = PositionStock.iQuantity;
        //                    var endIQuantity = 0.0;
        //                    endIQuantity = double.Parse(nowIQuantity) + double.Parse(number);
        //                    whereDic = new Dictionary<string, object>();
        //                    whereDic["AutoId"] = PositionStock.AutoID;
        //                    dbTable = new DbTable();
        //                    dbTable.tableName = "InvPositionsum";
        //                    dbTable.updateValue = new { iQuantity = endIQuantity };
        //                    dbTable.whereDic = whereDic;
        //                    dbTable.editType = DbTable.otypes.edit;
        //                    auditSqlList.Add(dbTable);
        //                    mes = string.Format("反写货位现存量表(InvPositionsum):存货编码：{0}，" +
        //                 "仓库编码：{1},cFree1:{2},cFree3:{3},货位:{4}," +
        //                 "修改前结存数量：{5}，" +
        //                 "修改后结存数量：{6}，autoid：{7},", cinvcode, cWhCode,
        //                 cfree1, cfree3, cposition, nowIQuantity, endIQuantity, PositionStock.AutoID);
        //                    txt.AddLogMsg(mes);
        //                }


        //                #endregion

        //                #region 往存货货位记录表中添加信息
        //                var cnames = new
        //                {
        //                    cInvCode = "cinvcode",
        //                    cFree1 = "cfree1",
        //                    cFree2 = "cfree2",
        //                    cFree3 = "cfree3",
        //                    cFree4 = "cfree4",
        //                    iQuantity = "iquantity",
        //                    cPosCode = "cposition"
        //                };
        //                var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
        //                var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
        //                var citemList = new List<JObject>();
        //                citemList.Add(body);
        //                var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
        //                citem_names.Add("cWhCode");
        //                citem_names.Add("RdsID");//子表Autoid
        //                citem_names.Add("RdID");//主表ID
        //                citem_names.Add("cHandler");//创建人
        //                citem_names.Add("dDate");//单据日期
        //                citem_names.Add("bRdFlag");//出入库标识
        //                citem_names.Add("cvouchtype");//单据类型
        //                citem_names.Add("dDate");//单据日期
        //                citem_names.Add("iTrackId");
        //                var valueList = citem_list[0].ToList();
        //                valueList.Add(cWhCode);
        //                valueList.Add(auto_id);
        //                valueList.Add(ID);
        //                valueList.Add(header["cmaker"].ToString());
        //                valueList.Add(header["dDate"].ToString());
        //                valueList.Add("1");
        //                valueList.Add(header["cvouchtype"].ToString());
        //                valueList.Add(header["dDate"].ToString());
        //                valueList.Add("0");
        //                var tcitem_list = new List<IEnumerable<string>>();
        //                tcitem_list.Add(valueList);
        //                dbTable = new DbTable();
        //                dbTable.tableName = "InvPosition";
        //                dbTable.tableColumns = citem_names;
        //                dbTable.insertValues = tcitem_list;
        //                dbTable.editType = DbTable.otypes.add;
        //                auditSqlList.Add(dbTable);
        //                mes = string.Format("产成品入库新增货位存货表信息(InvPosition):存货编码：{0}，" +
        //            "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //            "数量：{4}，" +
        //            "货位：{5}，RdsID：{6},RdID：{7}" +
        //            "", cinvcode, cWhCode,
        //            cfree1, cfree3, body["iquantity"].ToString(), body["cposition"].ToString(),
        //            auto_id, ID);
        //                txt.AddLogMsg(mes);
        //                #endregion
        //            }
        //            #endregion

        //            #region  仓库现存量修改
        //            var isAdd = false;
        //            var scmId = "";
        //            var whCodeCollection = U8APIHelper.getCurrentStock(cinvcode, cWhCode, cfree1, cfree3);
        //            if (whCodeCollection.Count() < 1)
        //            {
        //                //新增现存量信息
        //                #region 查看SCM_Item表中是否存在itemId(没有需要新增)
        //                scmId = u8Db.Query("SCM_Item")
        //               .Where("cInvCode", "=", cinvcode)
        //               .Where("cFree1", "=", cfree1)
        //               .Where("cFree3", "=", cfree3)
        //               .Select("Id")
        //               .Get<string>().FirstOrDefault();
        //                if (string.IsNullOrWhiteSpace(scmId))
        //                {
        //                    #region 创建SCM_Item数据
        //                    var names = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
        //                    var item_names = names.GetType().GetProperties().Select(p => p.Name).ToList();
        //                    var item_values = names.GetType().GetProperties().Select(p => p.GetValue(names).ToString()).ToList();
        //                    var itemList = new List<JObject>();
        //                    itemList.Add(body);
        //                    var item_list = U8APIHelper.getDataValue(itemList, item_values);
        //                    //dbTable = new DbTable();
        //                    //dbTable.tableName = "SCM_Item";
        //                    //dbTable.tableColumns = item_names;
        //                    //dbTable.insertValues = item_list;
        //                    //dbTable.editType = DbTable.otypes.add;
        //                    //sqlList.Add(dbTable);
        //                    var SCM_Item = u8Db.Query("SCM_Item").Insert(item_names, item_list);
        //                    #endregion
        //                }
        //                #endregion
        //                #region 创建现存量信息数据 
        //                //查询SCM_Item数据
        //                scmId = u8Db.Query("SCM_Item")
        //               .Where("cInvCode", "=", cinvcode)
        //               .Where("cFree1", "=", cfree1)
        //               .Where("cFree3", "=", cfree3)
        //               .Select("Id")
        //               .Get<string>().FirstOrDefault();

        //                if (string.IsNullOrWhiteSpace(scmId))
        //                {
        //                    mes = string.Format("未获取到SCM_Item表中信息,仓库编码:{0}中存货编码:{1}，" +
        //                      "颜色(cFree1):{2},商标(cFree3):{3}", cWhCode, cinvcode, cfree1, cfree3);
        //                    txt.AddLogMsg(mes);
        //                    rsl.Message = mes;
        //                    return rsl;
        //                }
        //                var cnames = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
        //                var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
        //                var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
        //                var citemList = new List<JObject>();
        //                citemList.Add(body);
        //                var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
        //                citem_names.Add("cWhCode");
        //                citem_names.Add("ItemId");
        //                citem_names.Add("iQuantity");
        //                var valueList = citem_list[0].ToList();
        //                valueList.Add(cWhCode);
        //                valueList.Add(scmId);
        //                valueList.Add(number);
        //                var tcitem_list = new List<IEnumerable<string>>();
        //                tcitem_list.Add(valueList);
        //                dbTable = new DbTable();
        //                dbTable.tableName = "CurrentStock";
        //                dbTable.tableColumns = citem_names;
        //                dbTable.insertValues = tcitem_list;
        //                dbTable.editType = DbTable.otypes.add;
        //                sqlList.Add(dbTable);

        //                //txt.AddLogMsg(JsonConvert.SerializeObject(dbTable.tableColumns));
        //                //txt.AddLogMsg(JsonConvert.SerializeObject(dbTable.insertValues));

        //                #endregion
        //                mes = string.Format("新增入库现存量表(CurrentStock):存货编码：{0}，" +
        //                  "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //                  "修改前结存数量：{4}，修改后结存数量：{5}", cinvcode, cWhCode,
        //                  cfree1, cfree3, "0",number);
        //                txt.AddLogMsg(mes);

        //                isAdd = true;
        //            }
        //            if (!isAdd)
        //            {
        //                //修改现存量信息
        //                var DbCurrentStock = whCodeCollection.FirstOrDefault();
        //                //现在结存数量
        //                var nowiQuantity = DbCurrentStock.iQuantity;
        //                double endiQuantity = 0.0;
        //                endiQuantity = Convert.ToDouble(nowiQuantity) + Convert.ToDouble(number);

        //                #region  修改入库仓库的现存量数据
        //                whereDic = new Dictionary<string, object>();
        //                whereDic["AutoID"] = DbCurrentStock.AutoID;
        //                dbTable = new DbTable();
        //                dbTable.tableName = "CurrentStock";
        //                dbTable.updateValue = new { iQuantity = endiQuantity };
        //                dbTable.whereDic = whereDic;
        //                dbTable.editType = DbTable.otypes.edit;
        //                sqlList.Add(dbTable);
        //                mes = string.Format("反写入库现存量表(CurrentStock):存货编码：{0}，" +
        //                      "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //                      "修改前结存数量：{4}，" +
        //                      "修改后结存数量：{5},autoid：{6}", cinvcode, cWhCode,
        //                      cfree1, cfree3, nowiQuantity, endiQuantity, DbCurrentStock.AutoID);
        //                txt.AddLogMsg(mes);

        //                #endregion

        //            }
        //            #endregion

        //        }

        //        dbTable = new DbTable();
        //        dbTable.tableName = "rdrecords10";
        //        dbTable.tableColumns = body_names;
        //        dbTable.insertValues = body_list;
        //        dbTable.editType = DbTable.otypes.add;
        //        sqlList.Add(dbTable);

        //        //txt.AddLogMsg(JsonConvert.SerializeObject(dbTable.tableColumns));
        //        //txt.AddLogMsg(JsonConvert.SerializeObject(dbTable.insertValues));

        //        if (sqlList == null || sqlList.Count < 1)
        //        {
        //            rsl.Message = "未获取到更新数据(sqlList)";
        //            return rsl;
        //        }

        //        rsl = cmd.TransactionSample(sqlList);

        //        if (rsl.Result)
        //        {
        //            var ms = string.Format("新增产成品入库单调用结果：true,产成品入库单单据号：{0},产成品入库单主表id{1}", cCode, ID);
        //            txt.AddLogMsg(ms);
        //            rsl.Result = true;
        //            rsl.Data = cCode;
        //            rsl.Message = "【新增】新增产成品入库单成功";

        //            var auto_id = (long.Parse(AutoID) + bodyList.Count - 1).ToString().PadLeft(10, '0');
        //            // 还是需要回写，不回写会报错
        //            U8APIHelper.Set_TransVouch_MainIndex_SubIndex("rd", auto_id);
        //        }
        //        else
        //        {
        //            var ms = string.Format("新增产成品入库单调用结果：false,【新增】产成品入库单直接入库失败:{0}", rsl.Message);
        //            txt.AddLogMsg(ms);
        //            rsl.Message = ms;
        //        }

        //    }
        //    catch (Exception ex)
        //    {
        //        rsl.Message = "异常错误：" + ex.Message;
        //        txt.AddLogMsg(rsl.Message);
        //    }
        //    return rsl;
        //}


        //// 根据U8返回的ID，获取产成品入库单单号
        //string Seize_cCode_From_RdRecord10(string ID)
        //{
        //    var u8Db = new Katabase().U8Db();
        //    var list = u8Db.Query("rdrecord10")
        //        .Where("ID", "=", ID)
        //        .Get<DbRdRecord10>();

        //    return list.FirstOrDefault().cCode;
        //}
    }

    #region 其他出库
    public partial class U8_WarehouseManagement : WebService
    {
        //public ReturnResult otherOut(string jsonStr)
        //{
        //    var rsl = new ReturnResult();
        //    try
        //    {
        //        //执行的sql语句
        //        var sqlList = new List<DbTable>();
        //        var dbTable = new DbTable();
        //        var json = JsonConvert.DeserializeObject<JObject>(jsonStr);

        //        txt.AddLogMsg("其他出库单");
        //        txt.AddLogMsg(jsonStr);

        //        var cNumber = "";//新增后的流水号
        //        var cCode = "";//新增后的单据号
        //        var ID = "";
        //        var AutoID = "";

        //        var u8Db = new Katabase().U8Db();

        //        var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        var bodyList = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());

        //        txt.AddLogMsg("其他出库单第一步");
        //        var whereDic = new Dictionary<string, object>();

        //        #region 获取并反写其他出库单的流水号和id
        //        U8APIHelper.GetIndex_FromProcedure(1, "0302", "rd", out cNumber, out cCode, out ID, out AutoID);
        //        whereDic = new Dictionary<string, object>();
        //        whereDic["CardNumber"] = "0302";
        //        dbTable = new DbTable();
        //        dbTable.tableName = "VoucherHistory";
        //        dbTable.updateValue = new { cNumber = cNumber };
        //        dbTable.whereDic = whereDic;
        //        dbTable.editType = DbTable.otypes.edit;
        //        sqlList.Add(dbTable);
        //        txt.AddLogMsg(string.Format("返回其他出库(rd09)rd的id{0}，autoid{1},cNumber{2}", ID, AutoID, cNumber));
        //        #endregion

        //        #region  创建其他出库单主表数据
        //        var csysbarcode = "||st09|" + cCode;
        //        var rd09head_names = header.Properties().Select(p => p.Name).ToList();
        //        rd09head_names.Add("cCode");
        //        rd09head_names.Add("ID");
        //        rd09head_names.Add("csysbarcode");

        //        var rd09head_values = header.Properties().Select(p => p.Value.ToString()).ToList();
        //        rd09head_values.Add(cCode);
        //        rd09head_values.Add(ID);
        //        rd09head_values.Add(csysbarcode);

        //        var rd09head_list = new List<IEnumerable<string>>
        //        {
        //            rd09head_values
        //        };
        //        txt.AddLogMsg("其他出库第二步");

        //        dbTable = new DbTable();
        //        dbTable.tableName = "rdrecord09";
        //        dbTable.tableColumns = rd09head_names;
        //        dbTable.insertValues = rd09head_list;
        //        dbTable.editType = DbTable.otypes.add;
        //        sqlList.Add(dbTable);
        //        #endregion

        //        #region  创建其他出库单子表数据   以及现存量修改
        //        var rd09body_names = new List<string>();
        //        //其他出库子表列
        //        rd09body_names = bodyList[0].Properties().Select(p => p.Name).ToList();
        //        rd09body_names.Add("ID");
        //        rd09body_names.Add("autoID");

        //        var body_list = new List<IEnumerable<string>>();
        //        var rd09body_list = new List<IEnumerable<string>>();
        //        //var mes = "";
        //        #region 现存量检查（保存时好像不用）
        //        //for (int i = 0; i < bodyList.Count; i++)
        //        //{
        //        //    #region 检查现存量，现存量不足，不让进行出库
        //        //    var cWhCode = "";
        //        //    cWhCode = header["cwhcode"].ToString();

        //        //    var body = bodyList[i];
        //        //    var cinvcode = body["cinvcode"].ToString();
        //        //    var cfree1 = body["cfree1"].ToString();
        //        //    var cfree3 = body["cfree3"].ToString();
        //        //    var number = body["iquantity"].ToString();

        //        //    if (!CheckCurrentStock(cinvcode, cWhCode, cfree1, cfree3, number))
        //        //    {
        //        //        mes = string.Format("出库失败,仓库编码:{0}中存货编码:{1}，" +
        //        //           "颜色(cFree1):{2},商标(cFree3):{3}的现存量不足", cWhCode, cinvcode, cfree1, cfree3);
        //        //        txt.AddLogMsg(mes);
        //        //        rsl.Message = mes;
        //        //        return rsl;
        //        //    }
        //        //    #endregion

        //        //    #region 修改现存量表（如果没有记录需要添加现存量记录）
        //        //    //获取该存货的现存量(出库仓库的现存量)
        //        //    var owhCodeCollection = U8APIHelper.getCurrentStock(cinvcode, cWhCode, cfree1, cfree3);
        //        //    if (owhCodeCollection.Count() < 1)
        //        //    {
        //        //        mes = string.Format("未获取到现存量信息,仓库编码:{0}中存货编码:{1}，" +
        //        //               "颜色(cFree1):{2},商标(cFree3):{3}的现存量不存在", cWhCode, cinvcode, cfree1, cfree3);
        //        //        txt.AddLogMsg(mes);
        //        //        rsl.Message = mes;
        //        //        return rsl;
        //        //    }
        //        //    var oDbCurrentStock = owhCodeCollection.FirstOrDefault();
        //        //    //现在结存数量（审核后减少）
        //        //    var nowiQuantity = oDbCurrentStock.iQuantity;
        //        //    double endiQuantity = 0.0;
        //        //    endiQuantity = Convert.ToDouble(nowiQuantity) - Convert.ToDouble(number);

        //        //    //现在结存数量（减少）
        //        //    whereDic = new Dictionary<string, object>();
        //        //    whereDic["AutoID"] = oDbCurrentStock.AutoID;
        //        //    dbTable = new DbTable();
        //        //    dbTable.tableName = "CurrentStock";
        //        //    dbTable.updateValue = new { iQuantity = endiQuantity};
        //        //    dbTable.whereDic = whereDic;
        //        //    dbTable.editType = DbTable.otypes.edit;
        //        //    sqlList.Add(dbTable);
        //        //    mes = string.Format("出库现存量表(CurrentStock):存货编码：{0}，" +
        //        //          "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //        //          "修改前结存数量：{4}，修改后结存数量：{5}", cinvcode, cWhCode,
        //        //          cfree1, cfree3, nowiQuantity, endiQuantity);
        //        //    txt.AddLogMsg(mes);

        //        //    #endregion

        //        //}
        //        #endregion
        //        var rdAutoId = "";

        //        var mes = "";
        //        var cwhCode = header["cwhcode"].ToString();

        //        for (int i = 0; i < bodyList.Count; i++)
        //        {
        //            #region 其他出库子表数据
        //            var rd09body_values = bodyList[i].Properties().Select(p => p.Value.ToString()).ToList();
        //            rd09body_values.Add(ID);
        //            var rd09auto_id = (long.Parse(AutoID) + i).ToString().PadLeft(10, '0');
        //            rdAutoId = rd09auto_id;
        //            rd09body_values.Add(rd09auto_id);
        //            rd09body_list.Add(rd09body_values);
        //            #endregion

        //            #region 现存量修改
        //            var body = bodyList[i];
        //            var cinvcode = body["cinvcode"].ToString();
        //            var cfree1 = body["cfree1"].ToString();
        //            var cfree3 = body["cfree3"].ToString();
        //            var number = body["iquantity"].ToString();

        //            #region 判断货位现存量并进行修改
        //            //目标货位
        //            var goodsPosition = body["cposition"].ToString();
        //            if (!string.IsNullOrWhiteSpace(goodsPosition))
        //            {
        //                #region 修改货位现存量数据
        //                var oPositionCollection = U8APIHelper.getPositionStock(cinvcode, cwhCode, cfree1, cfree3, goodsPosition);
        //                if (oPositionCollection.Count() < 1)
        //                {
        //                    mes = string.Format("未获取到现存量信息,仓库编码:{0}中存货编码:{1}，" +
        //                           "颜色(cFree1):{2},商标(cFree3):{3},货位:{4}的现存量不存在", cwhCode, cinvcode, cfree1, cfree3, goodsPosition);
        //                    txt.AddLogMsg(mes);
        //                    rsl.Message = mes;
        //                    return rsl;
        //                }

        //                var oPositionStock = oPositionCollection.FirstOrDefault();
        //                if (oPositionStock != null)
        //                {
        //                    //现在的结存数量
        //                    var nowIQuantity = oPositionStock.iQuantity;
        //                    var endIQuantity = 0.0;
        //                    endIQuantity = double.Parse(nowIQuantity) - double.Parse(number);
        //                    whereDic = new Dictionary<string, object>();
        //                    whereDic["AutoId"] = oPositionStock.AutoID;
        //                    dbTable = new DbTable();
        //                    dbTable.tableName = "InvPositionsum";
        //                    dbTable.updateValue = new { iQuantity = endIQuantity };
        //                    dbTable.whereDic = whereDic;
        //                    dbTable.editType = DbTable.otypes.edit;
        //                    sqlList.Add(dbTable);
        //                    mes = string.Format("反写货位现存量表(InvPositionsum):存货编码：{0}，" +
        //                 "仓库编码：{1},cFree1:{2},cFree3:{3},货位:{4}," +
        //                 "修改前结存数量：{5}，" +
        //                 "修改后结存数量：{6}，autoid：{7},", cinvcode, cwhCode,
        //                 cfree1, cfree3, goodsPosition, nowIQuantity, endIQuantity, oPositionStock.AutoID);
        //                    txt.AddLogMsg(mes);
        //                }

        //                #endregion

        //                #region 有货位的话 需要往存货货位记录表中添加信息
        //                var cnames = new
        //                {
        //                    cInvCode = "cinvcode",
        //                    cFree1 = "cfree1",
        //                    cFree2 = "cfree2",
        //                    cFree3 = "cfree3",
        //                    cFree4 = "cfree4",
        //                    iQuantity = "iquantity",
        //                    cPosCode = "cposition"
        //                };
        //                var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
        //                var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
        //                var citemList = new List<JObject>();
        //                citemList.Add(body);
        //                var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
        //                citem_names.Add("cWhCode");
        //                citem_names.Add("RdsID");//子表Autoid
        //                citem_names.Add("RdID");//主表ID
        //                citem_names.Add("cHandler");//创建人
        //                citem_names.Add("dDate");//单据日期
        //                citem_names.Add("bRdFlag");//出入库标识
        //                citem_names.Add("cvouchtype");//单据类型
        //                citem_names.Add("dVouchDate");//单据日期
        //                citem_names.Add("iTrackId");
        //                var valueList = citem_list[0].ToList();
        //                valueList.Add(cwhCode);
        //                valueList.Add(rdAutoId);
        //                valueList.Add(ID);
        //                valueList.Add(header["cmaker"].ToString());
        //                valueList.Add(header["ddate"].ToString());
        //                valueList.Add(header["brdflag"].ToString());
        //                valueList.Add(header["cvouchtype"].ToString());
        //                valueList.Add(header["ddate"].ToString());
        //                valueList.Add("0");
        //                var tcitem_list = new List<IEnumerable<string>>();
        //                tcitem_list.Add(valueList);
        //                dbTable = new DbTable();
        //                dbTable.tableName = "InvPosition";
        //                dbTable.tableColumns = citem_names;
        //                dbTable.insertValues = tcitem_list;
        //                dbTable.editType = DbTable.otypes.add;
        //                sqlList.Add(dbTable);
        //                mes = string.Format("其他出库新增货位存货表信息(InvPosition):存货编码：{0}，" +
        //            "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //            "数量：{4}，" +
        //            "货位：{5}，RdsID：{6},RdID：{7}" +
        //            "", cinvcode, cwhCode,
        //           cfree1, cfree3, number, goodsPosition,
        //            rdAutoId, ID);
        //                txt.AddLogMsg(mes);
        //                #endregion
        //            }

        //            #endregion

        //            #region 修改仓库现存量表（如果没有记录需要添加现存量记录）
        //            //获取该存货的现存量(出库仓库的现存量)
        //            var isnull = false; // 是否有现存量信息，没有新增一条
        //            var whCodeCollection = U8APIHelper.getCurrentStock(cinvcode, cwhCode, cfree1, cfree3);
        //            if (whCodeCollection.Count() < 1)
        //            {
        //                mes = string.Format("未获取到现存量信息,仓库编码:{0}中存货编码:{1}，" +
        //                       "颜色(cFree1):{2},商标(cFree3):{3}的现存量不存在", cwhCode, cinvcode, cfree1, cfree3);
        //                txt.AddLogMsg(mes);
        //                isnull = true;
        //            }

        //            var oDbCurrentStock = new Models.DbCurrentStock();//4
        //            var nowiQuantity = ""; var nowfTransOutQuantity = ""; var nowfTransInQuantity = "";//4
        //            double endiQuantity = 0.0;

        //            if (isnull)//4
        //            {//4
        //                var cscmId = "";
        //                #region 新增出库所在仓库的现存量信息
        //                #region 查看SCM_Item表中是否存在itemId(没有需要新增)
        //                cscmId = u8Db.Query("SCM_Item")
        //               .Where("cInvCode", "=", cinvcode)
        //               .Where("cFree1", "=", cfree1)
        //               .Where("cFree3", "=", cfree3)
        //               .Select("Id")
        //               .Get<string>().FirstOrDefault();
        //                if (string.IsNullOrWhiteSpace(cscmId))
        //                {
        //                    #region 创建SCM_Item数据
        //                    var names = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
        //                    var item_names = names.GetType().GetProperties().Select(p => p.Name).ToList();
        //                    var item_values = names.GetType().GetProperties().Select(p => p.GetValue(names).ToString()).ToList();
        //                    var itemList = new List<JObject>();
        //                    itemList.Add(body);
        //                    var item_list = U8APIHelper.getDataValue(itemList, item_values);
        //                    var SCM_Item = u8Db.Query("SCM_Item").Insert(item_names, item_list);
        //                    #endregion
        //                }
        //                #endregion
        //                #region 创建现存量信息数据 
        //                //查询SCM_Item数据
        //                cscmId = u8Db.Query("SCM_Item")
        //               .Where("cInvCode", "=", cinvcode)
        //               .Where("cFree1", "=", cfree1)
        //               .Where("cFree3", "=", cfree3)
        //               .Select("Id")
        //               .Get<string>().FirstOrDefault();
        //                if (string.IsNullOrWhiteSpace(cscmId))
        //                {
        //                    mes = string.Format("未获取到SCM_Item表中信息,仓库编码:{0}中存货编码:{1}，" +
        //                      "颜色(cFree1):{2},商标(cFree3):{3}", cwhCode, cinvcode, cfree1, cfree3);
        //                    txt.AddLogMsg(mes);
        //                    rsl.Message = mes;
        //                    return rsl;
        //                }
        //                var cnames = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
        //                var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
        //                var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
        //                var citemList = new List<JObject>();
        //                citemList.Add(body);
        //                var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
        //                citem_names.Add("cWhCode");
        //                citem_names.Add("ItemId");
        //                citem_names.Add("iSodid"); ;
        //                citem_names.Add("iQuantity");
        //                var valueList = citem_list[0].ToList();
        //                valueList.Add(cwhCode);
        //                valueList.Add(cscmId);
        //                valueList.Add("");
        //                valueList.Add(number);
        //                var tcitem_list = new List<IEnumerable<string>>();
        //                tcitem_list.Add(valueList);
        //                dbTable = new DbTable();
        //                dbTable.tableName = "CurrentStock";
        //                dbTable.tableColumns = citem_names;
        //                dbTable.insertValues = tcitem_list;
        //                dbTable.editType = DbTable.otypes.add;
        //                sqlList.Add(dbTable);
        //                #endregion
        //                mes = string.Format("新增出库现存量表(CurrentStock):存货编码：{0}，" +
        //                      "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //                      "修改前结存数量：{4}，" +
        //                      "修改后结存数量：{5}，修改后调拨待发数量：{6}," +
        //                      "修改前调拨在途数量：{7}", cinvcode, cwhCode,
        //                      cfree1, cfree3, "0", number);
        //                txt.AddLogMsg(mes);
        //                #endregion
        //            }//4
        //            else//4
        //            {
        //                oDbCurrentStock = whCodeCollection.FirstOrDefault();
        //                nowiQuantity = oDbCurrentStock.iQuantity;
        //                endiQuantity = Convert.ToDouble(nowiQuantity) - Convert.ToDouble(number);

        //                #region 修改出库仓库现存量信息
        //                whereDic = new Dictionary<string, object>();
        //                whereDic["AutoID"] = oDbCurrentStock.AutoID;
        //                dbTable = new DbTable();
        //                dbTable.tableName = "CurrentStock";
        //                dbTable.updateValue = new { iQuantity = endiQuantity };
        //                dbTable.whereDic = whereDic;
        //                dbTable.editType = DbTable.otypes.edit;
        //                sqlList.Add(dbTable);
        //                mes = string.Format("修改出库现存量表(CurrentStock):存货编码：{0}，" +
        //                      "仓库编码：{1},cFree1:{2},cFree3:{3}," +
        //                      "修改前结存数量：{4}，修改后结存数量：{5}，" +
        //                      "autoid:{6}", cinvcode, cwhCode,
        //                      cfree1, cfree3, nowiQuantity, endiQuantity, oDbCurrentStock.AutoID);
        //                txt.AddLogMsg(mes);
        //                #endregion
        //            }//4

        //            #endregion


        //            #endregion
        //        }


        //        dbTable = new DbTable();
        //        dbTable.tableName = "rdrecords09";
        //        dbTable.tableColumns = rd09body_names;
        //        dbTable.insertValues = rd09body_list;
        //        dbTable.editType = DbTable.otypes.add;
        //        sqlList.Add(dbTable);


        //        #endregion

        //        rsl = cmd.TransactionSample(sqlList);

        //        if (rsl.Result)
        //        {
        //            var ms = string.Format("新增其他出库单，调用结果：true,其他出库单单据号：{0},其他出库单主表id{1}", cCode, ID);
        //            txt.AddLogMsg(ms);
        //            rsl.Result = true;
        //            rsl.Data = cCode;
        //            rsl.Message = "【新增】新增其他出库单成功";

        //            //DrawBack_cTVCode(cTVCode);
        //            var auto_id = (long.Parse(AutoID) + bodyList.Count - 1).ToString().PadLeft(10, '0');
        //            // 还是需要回写，不回写会报错
        //            U8APIHelper.Set_TransVouch_MainIndex_SubIndex("rd", auto_id);

        //        }
        //        else
        //        {
        //            var ms = string.Format("新增其他出库单，调用结果：false,【新增】其他出库单失败:{0}", rsl.Message);
        //            txt.AddLogMsg(ms);
        //            rsl.Message = ms;
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        rsl.Message = ex.Message;
        //    }
        //    return rsl;
        //}

    }
    #endregion

  

    // 材料出库
    public partial class U8_WarehouseManagement : WebService
    {
        // 材料出库
        //public ReturnResult MaterialOut(string jsonStr)
        //{
        //    var rsl = new ReturnResult();
        //    try
        //    {
        //        txt.AddLogMsg("材料出库单代码开始执行:" + jsonStr);
        //        var json = JsonConvert.DeserializeObject<JObject>(jsonStr);

        //        #region 用户登录
        //        var loMsg = loginBase.CheckLogin(json["System"]["sAccID"].ToString(), json["System"]["sYear"].ToString(), json["System"]["sUserID"].ToString(), json["System"]["sPassword"].ToString(), json["System"]["sDate"].ToString(), json["System"]["sServer"].ToString());
        //        if (!loMsg.Result)
        //        {
        //            #region 登录失败立即返回结果
        //            rsl.Message = loMsg.Message;
        //            return rsl;
        //            #endregion
        //        }
        //        #endregion
        //        txt.AddLogMsg("登录成功，开始第二步:" + JsonConvert.SerializeObject(loMsg));
        //        //第二步：构造环境上下文对象，传入login，并按需设置其它上下文参数
        //        U8EnvContext envContext = new U8EnvContext();
        //        envContext.U8Login = (U8Login.clsLogin)loMsg.Data;
        //        txt.AddLogMsg("开始第三步");

        //        //第三步：设置API地址标识(Url)
        //        //当前API：添加新单据的地址标识为：U8API/MaterialOut/Add
        //        U8ApiAddress myApiAddress = new U8ApiAddress("U8API/MaterialOut/Add");

        //        txt.AddLogMsg(string.Format("开始第四步：{0}", JsonConvert.SerializeObject(myApiAddress)));
        //        //第四步：构造APIBroker
        //        U8ApiBroker broker = new U8ApiBroker(myApiAddress, envContext);

        //        //第五步：API参数赋值
        //        txt.AddLogMsg("开始第五步");
        //        //给普通参数sVouchType赋值。此参数的数据类型为System.String，此参数按值传递，表示单据类型：11
        //        broker.AssignNormalValue("sVouchType", "11");

        //        #region 主表数据
        //        var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        txt.AddLogMsg(string.Format("接收的header参数：{0}", json["Head"].ToString()));
        //        MSXML2.DOMDocument domH = new DOMDocumentClass();
        //        string path = this.Server.MapPath(@"\");
        //        domH.load(path + "\\DomXML\\RdRecord11domhead.xml");
        //        U8APIHelper.FormatDom(ref domH, 1, "A");
        //        MSXML2.IXMLDOMNodeList domNodesHead = domH.childNodes[0].childNodes[1].childNodes;

        //        foreach (var obj in header.Properties())
        //        {
        //            domNodesHead[0].attributes.getNamedItem(obj.Name).nodeValue = obj.Value; //解析json，填充数据（主表）
        //        }
        //        ((IXMLDOMElement)domNodesHead[0]).setAttribute("bWireless", "1");  //解决WebService生成单据慢问题
        //        broker.AssignNormalValue("DomHead", domH);
        //        #endregion
        //        txt.AddLogMsg(string.Format("参数构建完成,表头参数：{0}", DateTime.Now.ToString()));

        //        #region 从表数据填充
        //        var list = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());
        //        MSXML2.DOMDocument domB = new DOMDocumentClass();
        //        domB.load(path + "DomXML\\RdRecord11dombody.xml");
        //        U8APIHelper.AddDomDataRow(ref domB, list.Count, "A");

        //        for (int i = 0; i < list.Count; i++)
        //        {
        //            #region 判断是否超过可用量
        //            //var difNum = proCYNum[list[i]["cinvcode"].ToString()];
        //            //if (double.Parse(difNum) < 0)
        //            //{
        //            //    rsl.Result = false;
        //            //    rsl.Message = "存货编码" + list[i]["cinvcode"].ToString() + "；" + list[i]["cinvname"].ToString() + "；超出可用量";
        //            //    txt.AddLogMsg("错误信息为：" + rsl.Message);
        //            //    return rsl;
        //            //}
        //            #endregion
        //            MSXML2.IXMLDOMNodeList domNodesBody = domB.childNodes[0].childNodes[1].childNodes;
        //            foreach (var j in list[i].Properties())
        //            {
        //                domNodesBody[i].attributes.getNamedItem(j.Name).nodeValue = j.Value;
        //            }
        //        }
        //        broker.AssignNormalValue("domBody", domB);
        //        txt.AddLogMsg(string.Format("表体数据构建,表体参数：{0}", json["List"].ToString()));
        //        #endregion
        //        txt.AddLogMsg("数据构建完成");

        //        //给普通参数domPosition赋值。此参数的数据类型为System.Object，此参数按引用传递，表示货位：传空
        //        broker.AssignNormalValue("domPosition", null);

        //        //该参数errMsg为OUT型参数，由于其数据类型为System.String，为一般值类型，因此不必传入一个参数变量。在API调用返回时，可以通过GetResult("errMsg")获取其值

        //        //给普通参数cnnFrom赋值。此参数的数据类型为ADODB.Connection，此参数按引用传递，表示连接对象,如果由调用方控制事务，则需要设置此连接对象，否则传空
        //        broker.AssignNormalValue("cnnFrom", null);

        //        //该参数VouchId为INOUT型普通参数。此参数的数据类型为System.String，此参数按值传递。在API调用返回时，可以通过GetResult("VouchId")获取其值
        //        broker.AssignNormalValue("VouchId", string.Empty);

        //        //该参数domMsg为OUT型参数，由于其数据类型为MSXML2.IXMLDOMDocument2，非一般值类型，因此必须传入一个参数变量。在API调用返回时，可以直接使用该参数
        //        MSXML2.IXMLDOMDocument2 domMsg = new MSXML2.DOMDocumentClass();
        //        broker.AssignNormalValue("domMsg", domMsg);

        //        //给普通参数bCheck赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否控制可用量。
        //        broker.AssignNormalValue("bCheck", false);

        //        //给普通参数bBeforCheckStock赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示检查可用量
        //        broker.AssignNormalValue("bBeforCheckStock", false);

        //        //给普通参数bIsRedVouch赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否红字单据
        //        //broker.AssignNormalValue("bIsRedVouch", new System.Boolean());
        //        if (!json.ContainsKey("isBlue") || json["isBlue"].ToString() == "1")
        //        {
        //            broker.AssignNormalValue("bIsRedVouch", false);
        //        }
        //        else
        //        {
        //            broker.AssignNormalValue("bIsRedVouch", true);
        //        }

        //        //给普通参数sAddedState赋值。此参数的数据类型为System.String，此参数按值传递，表示传空字符串
        //        broker.AssignNormalValue("sAddedState", string.Empty);

        //        //给普通参数bReMote赋值。此参数的数据类型为System.Boolean，此参数按值传递，表示是否远程：转入false
        //        broker.AssignNormalValue("bReMote", false);

        //        txt.AddLogMsg("第六步开始调用API");
        //        #region 第六步：调用API
        //        if (!broker.Invoke())
        //        {
        //            //错误处理
        //            Exception apiEx = broker.GetException();
        //            if (apiEx != null)
        //            {
        //                if (apiEx is MomSysException)
        //                {
        //                    MomSysException sysEx = apiEx as MomSysException;
        //                    rsl.Message = string.Format("系统异常:{0}", sysEx.Message);
        //                    //todo:异常处理
        //                }
        //                else if (apiEx is MomBizException)
        //                {
        //                    MomBizException bizEx = apiEx as MomBizException;
        //                    rsl.Message = string.Format("API异常：{0}", bizEx.Message);
        //                    //todo:异常处理
        //                }
        //                //异常原因
        //                String exReason = broker.GetExceptionString();
        //                if (exReason.Length != 0)
        //                {
        //                    rsl.Message = string.Format("异常原因：{0}", exReason);
        //                }
        //            }
        //            //结束本次调用，释放API资源
        //            broker.Release();
        //            return rsl; ;
        //        }
        //        #endregion

        //        //第七步：获取返回结果

        //        //获取返回值
        //        //获取普通返回值。此返回值数据类型为System.Boolean，此参数按值传递，表示返回值:true:成功,false:失败
        //        txt.AddLogMsg(broker.GetReturnValue().ToString());
        //        rsl.Result = Convert.ToBoolean(broker.GetReturnValue());

        //        if (!rsl.Result)
        //        {
        //            //获取普通OUT参数errMsg。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空
        //            rsl.Message = broker.GetResult("errMsg") as System.String;
        //            txt.AddLogMsg("错误信息为：" + rsl.Message);

        //        }
        //        else
        //        {
        //            //获取普通INOUT参数VouchId。此返回值数据类型为System.String，在使用该参数之前，请判断是否为空

        //            var ID = broker.GetResult("VouchId") as System.String;
        //            rsl.Data = Seize_cCode_From_RdRecord11(ID);
        //        }


        //        //结束本次调用，释放API资源
        //        broker.Release();
        //        return rsl;

        //    }
        //    catch (Exception ex)
        //    {
        //        rsl.Message = ex.Message;
        //    }
        //    return rsl;
        //}
        //// 根据U8返回的ID，获取材料出库单单号
        //string Seize_cCode_From_RdRecord11(string ID)
        //{
        //    var u8Db = new Katabase().U8Db();
        //    var list = u8Db.Query("rdrecord11")
        //        .Where("ID", "=", ID)
        //        .Get<DbRdRecord11>();

        //    return list.FirstOrDefault().cCode;
        //}
    }

    // 调拨单 直接写库
    public partial class U8_WarehouseManagement : WebService
    {
//        public ReturnResult TransVouchDirect(string jsonStr)
//        {
//            var rsl = new ReturnResult();
//            try
//            {
//                //执行的sql语句
//                var sqlList = new List<DbTable>();
//                var auditSqlList = new List<DbTable>();//审核时的sql语句
//                var dbTable = new DbTable();
//                var json = JsonConvert.DeserializeObject<JObject>(jsonStr);

//                txt.AddLogMsg("调拨单开始");
//                txt.AddLogMsg(jsonStr);

//                var cNumber = "";//新增后的流水号
//                var cTVCode = "";//新增后的单据号
//                var ID = "";
//                var AutoID = "";
//                //Get_TransVouch_MainIndex_SubIndex(out cTVCode, out ID, out AutoID);

//                var u8Db = new Katabase().U8Db();

//                var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
//                var bodyList = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());
//                var rd09header = new JObject();
//                var rd09bodyList = new List<JObject>();
//                var rd08header = new JObject();
//                var rd08bodyList = new List<JObject>();
//                if (json.Property("rd09Head") != null)
//                {
//                    rd09header = JsonConvert.DeserializeObject<JObject>(json["rd09Head"].ToString());
//                }
//                if (json.Property("rd09List") != null)
//                {
//                    rd09bodyList = JsonConvert.DeserializeObject<List<JObject>>(json["rd09List"].ToString());
//                }
//                if (json.Property("rd08Head") != null)
//                {
//                    rd08header = JsonConvert.DeserializeObject<JObject>(json["rd08Head"].ToString());
//                }
//                if (json.Property("rd08List") != null)
//                {
//                    rd08bodyList = JsonConvert.DeserializeObject<List<JObject>>(json["rd08List"].ToString());
//                }
//                //判断调拨单是否需要审核（如果传入了审核人和审核时间就默认为要生成审核状态的调拨单）
//                var isAudit = "";
//                if (header.Property("cverifyperson") != null && header.Property("dverifydate") != null && !string.IsNullOrWhiteSpace(header["cverifyperson"].ToString()) && !string.IsNullOrWhiteSpace(header["dverifydate"].ToString()))
//                {
//                    isAudit = "1";
//                }

//                if (isAudit.Equals("1"))
//                {
//                    if (rd09header == null || rd09header.Count < 1 || rd09bodyList == null || rd09bodyList.Count < 1 || rd08header == null || rd08header.Count < 1 || rd08bodyList == null || rd08bodyList.Count < 1)
//                    {
//                        rsl.Message = "请传入审核后生成的其他出、入库单据的数据";
//                        return rsl;
//                    }
//                }
//                var whereDic = new Dictionary<string, object>();
//                //GetIndex_FromProcedure(bodyList.Count, out cTVCode, out ID, out AutoID);
//                //GetIndex_FromProcedure(1, "tr",out cTVCode, out ID, out AutoID);
//                var CardNumber = "0304";
//                U8APIHelper.GetIndex_FromProcedure(1, CardNumber, "tr", out cNumber, out cTVCode, out ID, out AutoID);
//                //反写流水号调拨单
//                if (cNumber.Equals("1"))
//                {
//                    U8APIHelper.insertcNumber(CardNumber, cNumber, ref sqlList);
//                }
//                else
//                {
//                    whereDic = new Dictionary<string, object>();
//                    whereDic["CardNumber"] = "0304";
//                    dbTable = new DbTable();
//                    dbTable.tableName = "VoucherHistory";
//                    dbTable.updateValue = new { cNumber = cNumber };
//                    dbTable.whereDic = whereDic;
//                    dbTable.editType = DbTable.otypes.edit;
//                    sqlList.Add(dbTable);
//                }
//                txt.AddLogMsg(string.Format("返回tr的id{0}，autoid{1},CardNumber:{2},cNumber:{3}", ID, AutoID, CardNumber, cNumber));
//                #region 获取并反写其他出库单的流水号和id
//                string rd09cNumber = "", rd09Code = "", rd09ID = "", rd09AutoID = "";
//                if (isAudit.Equals("1"))
//                {
//                    CardNumber = "0302";
//                    U8APIHelper.GetIndex_FromProcedure(1, CardNumber, "rd", out rd09cNumber, out rd09Code, out rd09ID, out rd09AutoID);
//                    if (rd09cNumber.Equals("1"))
//                    {
//                        U8APIHelper.insertcNumber(CardNumber, rd09cNumber, ref auditSqlList);
//                    }
//                    else
//                    {
//                        whereDic = new Dictionary<string, object>();
//                        whereDic["CardNumber"] = "0302";
//                        dbTable = new DbTable();
//                        dbTable.tableName = "VoucherHistory";
//                        dbTable.updateValue = new { cNumber = rd09cNumber };
//                        dbTable.whereDic = whereDic;
//                        dbTable.editType = DbTable.otypes.edit;
//                        auditSqlList.Add(dbTable);
//                    }
//                    txt.AddLogMsg(string.Format("返回其他出库(rd09)rd的id{0}，autoid{1},CardNumber:{2},cNumber:{3}", rd09ID, rd09AutoID, CardNumber, rd09cNumber));
//                }
//                #endregion

//                #region 获取并反写其他入库单的流水号和id
//                string rd08cNumber = "", rd08Code = "", rd08ID = "", rd08AutoID = "";
//                if (isAudit.Equals("1"))
//                {
//                    CardNumber = "0301";
//                    U8APIHelper.GetIndex_FromProcedure(1, CardNumber, "rd", out rd08cNumber, out rd08Code, out rd08ID, out rd08AutoID);
//                    if (rd08cNumber.Equals("1"))
//                    {
//                        U8APIHelper.insertcNumber(CardNumber, rd08cNumber, ref auditSqlList);
//                    }
//                    else
//                    {
//                        whereDic = new Dictionary<string, object>();
//                        whereDic["CardNumber"] = "0301";
//                        dbTable = new DbTable();
//                        dbTable.tableName = "VoucherHistory";
//                        dbTable.updateValue = new { cNumber = rd08cNumber };
//                        dbTable.whereDic = whereDic;
//                        dbTable.editType = DbTable.otypes.edit;
//                        auditSqlList.Add(dbTable);
//                    }
//                    txt.AddLogMsg(string.Format("返回其他入库(rd08)rd的id{0}，autoid{1},CardNumber:{2},cNumber:{3}", rd08ID, rd08AutoID, CardNumber, rd08cNumber));
//                }
//                #endregion
//                txt.AddLogMsg("调拨单第一步");
//                #region 创建调拨单主表数据
//                var csysbarcode = "||st12|" + cTVCode;
//                var head_names = header.Properties().Select(p => p.Name).ToList();
//                head_names.Add("cTVCode");
//                head_names.Add("ID");
//                head_names.Add("csysbarcode");
//                head_names.Add("cDefine11");

//                var head_values = header.Properties().Select(p => p.Value.ToString()).ToList();
//                head_values.Add(cTVCode);
//                head_values.Add(ID);
//                head_values.Add(csysbarcode);
//                head_values.Add("写库");//写库的调拨单

//                var head_list = new List<IEnumerable<string>>
//                {
//                    head_values
//                };
//                txt.AddLogMsg("调拨单第二步");

//                //var head_result = u8Db.Query("transvouch").Insert(head_names, head_list);
//                dbTable = new DbTable();
//                dbTable.tableName = "transvouch";
//                dbTable.tableColumns = head_names;
//                dbTable.insertValues = head_list;
//                dbTable.editType = DbTable.otypes.add;
//                sqlList.Add(dbTable);
//                #endregion
//                //
//                var rd09csysbarcode = "";
//                var rd08csysbarcode = "";
//                if (isAudit.Equals("1"))
//                {
//                    #region  创建其他出库单主表数据
//                    rd09csysbarcode = "||st" + rd09header["cvouchtype"].ToString() + "|" + rd09Code;
//                    var rd09head_names = rd09header.Properties().Select(p => p.Name).ToList();
//                    rd09head_names.Add("cCode");
//                    rd09head_names.Add("ID");
//                    rd09head_names.Add("csysbarcode");
//                    rd09head_names.Add("cBusCode");

//                    var rd09head_values = rd09header.Properties().Select(p => p.Value.ToString()).ToList();
//                    rd09head_values.Add(rd09Code);
//                    rd09head_values.Add(rd09ID);
//                    rd09head_values.Add(rd09csysbarcode);
//                    rd09head_values.Add(cTVCode);

//                    var rd09head_list = new List<IEnumerable<string>>
//                {
//                    rd09head_values
//                };
//                    txt.AddLogMsg("其他出库第二步");

//                    //var head_result = u8Db.Query("transvouch").Insert(head_names, head_list);
//                    dbTable = new DbTable();
//                    dbTable.tableName = "rdrecord09";
//                    dbTable.tableColumns = rd09head_names;
//                    dbTable.insertValues = rd09head_list;
//                    dbTable.editType = DbTable.otypes.add;
//                    auditSqlList.Add(dbTable);

//                    #endregion

//                    #region  创建其他入库单主表数据

//                    rd08csysbarcode = "||st" + rd08header["cvouchtype"].ToString() + "|" + rd08Code;
//                    var rd08head_names = rd08header.Properties().Select(p => p.Name).ToList();
//                    rd08head_names.Add("cCode");
//                    rd08head_names.Add("ID");
//                    rd08head_names.Add("csysbarcode");
//                    rd08head_names.Add("cBusCode");

//                    var rd08head_values = rd08header.Properties().Select(p => p.Value.ToString()).ToList();
//                    rd08head_values.Add(rd08Code);
//                    rd08head_values.Add(rd08ID);
//                    rd08head_values.Add(rd08csysbarcode);
//                    rd08head_values.Add(cTVCode);

//                    var rd08head_list = new List<IEnumerable<string>>
//                {
//                    rd08head_values
//                };
//                    txt.AddLogMsg("其他入库第二步");

//                    //var head_result = u8Db.Query("transvouch").Insert(head_names, head_list);
//                    dbTable = new DbTable();
//                    dbTable.tableName = "rdrecord08";
//                    dbTable.tableColumns = rd08head_names;
//                    dbTable.insertValues = rd08head_list;
//                    dbTable.editType = DbTable.otypes.add;
//                    auditSqlList.Add(dbTable);
//                    #endregion
//                }
//                //调拨单子表列
//                var body_names = bodyList[0].Properties().Select(p => p.Name).ToList();
//                body_names.Add("ID");
//                body_names.Add("autoID");
//                body_names.Add("cTVCode");
//                var rd09body_names = new List<string>();
//                var rd08body_names = new List<string>();
//                if (isAudit.Equals("1"))
//                {
//                    //其他出库子表列
//                    rd09body_names = rd09bodyList[0].Properties().Select(p => p.Name).ToList();
//                    rd09body_names.Add("ID");
//                    rd09body_names.Add("autoID");
//                    rd09body_names.Add("iTrIds");//调拨单子表id
//                    rd09body_names.Add("cbsysbarcode");
//                    //其他入库子表列
//                    rd08body_names = rd08bodyList[0].Properties().Select(p => p.Name).ToList();
//                    rd08body_names.Add("ID");
//                    rd08body_names.Add("autoID");
//                    rd08body_names.Add("iTrIds");//调拨单子表id
//                    rd08body_names.Add("cbsysbarcode");
//                }
//                var body_list = new List<IEnumerable<string>>();
//                var rd09body_list = new List<IEnumerable<string>>();
//                var rd08body_list = new List<IEnumerable<string>>();
//                var mes = "";
//                #region 获取调拨单表头信息
//                var cOWhCode = "";
//                if (header.ContainsKey("cowhcode"))
//                {
//                    cOWhCode = header["cowhcode"].ToString();
//                }
//                else
//                {
//                    cOWhCode = header["cOWhCode"].ToString();
//                }
//                //入库仓库
//                var cIWhCode = header["ciwhcode"].ToString();
//                #endregion
//                for (int i = 0; i < bodyList.Count; i++)
//                {
//                    #region 调拨单字表数据
//                    var body_values = bodyList[i].Properties().Select(p => p.Value.ToString()).ToList();
//                    body_values.Add(ID);
//                    var auto_id = (long.Parse(AutoID) + i).ToString().PadLeft(10, '0');
//                    body_values.Add(auto_id);
//                    body_values.Add(cTVCode);

//                    body_list.Add(body_values);
//                    #endregion

//                    // 检查现存量，现存量不足，不让进行调拨
//                    var body = bodyList[i];
//                    var cinvcode = body["cinvcode"].ToString();
//                    var cfree1 = body["cfree1"].ToString();
//                    var cfree3 = body["cfree3"].ToString();
//                    var number = body["itvquantity"].ToString();
//                    //目标货位
//                    var targetGoodsPosition = body["cinposcode"].ToString();
//                    //发生货位
//                    var goodsPosition = body["coutposcode"].ToString();

//                    #region 按存货-颜色-商标 查 本次出库是否有从同一仓库不同货位调拨的情况  防止出现仓库现存量少减（加）的情况
//                    var totalNum = "0";   //存货-颜色-商标 总调拨数量
//                    var newList = bodyList.Where(p => p["cinvcode"].ToString() == cinvcode && p["cfree1"].ToString() == cfree1 
//                    && p["cfree3"].ToString() == cfree3).ToList();
//                    if (newList.Count > 1)
//                    {
//                        foreach (var s in newList)
//                        {
//                            totalNum = (Convert.ToInt32(totalNum) + Convert.ToInt32(s["itvquantity"].ToString())).ToString();
//                        }
//                        txt.AddLogMsg("存货：" + cinvcode + ",颜色：" + cfree1 + ",商标：" + cfree3 + "检测到本次从多个货位调拨出库，总调拨数量："+ totalNum);
//                    }
//                    else
//                    {
//                        totalNum = number;
//                    }
//                    #endregion

//                    if (isAudit.Equals("1"))//1
//                    {//1

//                        // 使用元组携带现存量返回

//                        var stockTuple = CheckCurrentStock_With_iQuantity(cinvcode, cOWhCode, cfree1, cfree3, totalNum); //number->totalNum
//                        if (!stockTuple.Item1)
//                        {
//                            mes = string.Format("调拨失败,仓库编码:{0}中存货编码:{1}，" +
//                               "颜色(cFree1):{2},商标(cFree3):{3}的现存量不足。现存量仅有:{4},出库数量:{5}",  cOWhCode, cinvcode, cfree1, cfree3,stockTuple.Item2, totalNum);
//                            txt.AddLogMsg(mes);
//                            rsl.Message = mes;
//                            return rsl;
//                        }

//                        // 原方法没有现存量

//                        //if (!CheckCurrentStock(cinvcode, cOWhCode, cfree1, cfree3, number))
//                        //{
//                        //    mes = string.Format("调拨失败,仓库编码:{0}中存货编码:{1}，" +
//                        //       "颜色(cFree1):{2},商标(cFree3):{3}的现存量不足", cOWhCode, cinvcode, cfree1, cfree3);
//                        //    txt.AddLogMsg(mes);
//                        //    rsl.Message = mes;
//                        //    return rsl;
//                        //}
//                    }//1
//                    #region 判断发生货位现存量并进行修改
//                    if (!string.IsNullOrWhiteSpace(goodsPosition))
//                    {
//                        var posiTuple = U8APIHelper.CheckPositionStock_With_iQuantity(cinvcode, cOWhCode, cfree1, cfree3, goodsPosition, number);

//                        if (!posiTuple.Item1)
//                        {
//                            mes = string.Format("调拨失败,仓库编码:{0}中存货编码:{1}，" +
//                              "颜色(cFree1):{2},商标(cFree3):{3},货位:{4}上的现存量不足。现存量仅有:{5},出库数量:{6}", cOWhCode, cinvcode, cfree1, cfree3,goodsPosition, posiTuple.Item2, number);
//                            txt.AddLogMsg(mes);
//                            rsl.Message = mes;
//                            return rsl;
//                        }

//                        //if (!U8APIHelper.CheckPositionStock(cinvcode, cOWhCode, cfree1, cfree3, goodsPosition, number))
//                        //{
//                        //    mes = string.Format("调拨失败,仓库编码:{0}中存货编码:{1}，" +
//                        //  "颜色(cFree1):{2},商标(cFree3):{3},货位:{4}上的现存量不足", cOWhCode, cinvcode, cfree1, cfree3, goodsPosition);
//                        //    txt.AddLogMsg(mes);
//                        //    rsl.Message = mes;
//                        //    return rsl;
//                        //}

//                        #region 修改货位现存量数据
//                        var oPositionCollection = U8APIHelper.getPositionStock(cinvcode, cOWhCode, cfree1, cfree3, goodsPosition);
//                        if (oPositionCollection.Count() < 1)
//                        {
//                            mes = string.Format("未获取到现存量信息,仓库编码:{0}中存货编码:{1}，" +
//                                   "颜色(cFree1):{2},商标(cFree3):{3},货位:{4}的现存量不存在", cOWhCode, cinvcode, cfree1, cfree3, goodsPosition);
//                            txt.AddLogMsg(mes);
//                            rsl.Message = mes;
//                            return rsl;
//                        }
//                        if (isAudit.Equals("1"))
//                        {
//                            var oPositionStock = oPositionCollection.FirstOrDefault();
//                            if (oPositionStock != null)
//                            {
//                                //现在的结存数量
//                                var nowIQuantity = oPositionStock.iQuantity;
//                                var endIQuantity = 0.0;
//                                endIQuantity = double.Parse(nowIQuantity) - double.Parse(number);
//                                whereDic = new Dictionary<string, object>();
//                                whereDic["AutoId"] = oPositionStock.AutoID;
//                                dbTable = new DbTable();
//                                dbTable.tableName = "InvPositionsum";
//                                dbTable.updateValue = new { iQuantity = endIQuantity };
//                                dbTable.whereDic = whereDic;
//                                dbTable.editType = DbTable.otypes.edit;
//                                auditSqlList.Add(dbTable);
//                                mes = string.Format("保存后反写货位现存量表(InvPositionsum):存货编码：{0}，" +
//                             "仓库编码：{1},cFree1:{2},cFree3:{3},货位:{4}," +
//                             "修改前结存数量：{5}，" +
//                             "修改后结存数量：{6}，autoid：{7},", cinvcode, cOWhCode,
//                             cfree1, cfree3, goodsPosition, nowIQuantity, endIQuantity, oPositionStock.AutoID);
//                                txt.AddLogMsg(mes);
//                            }
//                        }
//                        #endregion
//                    }
//                    #endregion

//                    #region 判断目标货位现存量并进行修改
//                    if (!string.IsNullOrWhiteSpace(targetGoodsPosition))
//                    {
//                        #region 修改货位现存量数据
//                        if (isAudit.Equals("1"))
//                        {
//                            var oPositionCollection = U8APIHelper.getPositionStock(cinvcode, cIWhCode, cfree1, cfree3, targetGoodsPosition);
//                            if (oPositionCollection.Count() < 1)
//                            {
//                                #region 添加货位现存量数据
//                                var cnames = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4", cPosCode = "cinposcode" };
//                                var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
//                                var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
//                                var citemList = new List<JObject>();
//                                citemList.Add(body);
//                                var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
//                                citem_names.Add("cWhCode");
//                                citem_names.Add("iQuantity");
//                                var valueList = citem_list[0].ToList();
//                                valueList.Add(cIWhCode);
//                                valueList.Add(number);
//                                var tcitem_list = new List<IEnumerable<string>>();
//                                tcitem_list.Add(valueList);
//                                dbTable = new DbTable();
//                                dbTable.tableName = "InvPositionsum";
//                                dbTable.tableColumns = citem_names;
//                                dbTable.insertValues = tcitem_list;
//                                dbTable.editType = DbTable.otypes.add;
//                                auditSqlList.Add(dbTable);
//                                mes = string.Format("保存后新增货位现存量表(InvPositionsum):存货编码：{0}，" +
//                              "仓库编码：{1},cFree1:{2},cFree3:{3},货位:{4}," +
//                              "修改前结存数量：{5}，" +
//                              "修改后结存数量：{6}", cinvcode, cIWhCode,
//                              cfree1, cfree3, targetGoodsPosition, "0", number);
//                                txt.AddLogMsg(mes);
//                                #endregion
//                            }
//                            else
//                            {
//                                #region 修改货位现存量数据
//                                var oPositionStock = oPositionCollection.FirstOrDefault();
//                                if (oPositionStock != null)
//                                {
//                                    //现在的结存数量
//                                    var nowIQuantity = oPositionStock.iQuantity;
//                                    var endIQuantity = 0.0;
//                                    endIQuantity = double.Parse(nowIQuantity) + double.Parse(number);
//                                    whereDic = new Dictionary<string, object>();
//                                    whereDic["AutoId"] = oPositionStock.AutoID;
//                                    dbTable = new DbTable();
//                                    dbTable.tableName = "InvPositionsum";
//                                    dbTable.updateValue = new { iQuantity = endIQuantity };
//                                    dbTable.whereDic = whereDic;
//                                    dbTable.editType = DbTable.otypes.edit;
//                                    auditSqlList.Add(dbTable);
//                                    mes = string.Format("保存后反写货位现存量表(InvPositionsum):存货编码：{0}，" +
//                                 "仓库编码：{1},cFree1:{2},cFree3:{3},货位:{4}," +
//                                 "修改前结存数量：{5}，" +
//                                 "修改后结存数量：{6}，autoid：{7},", cinvcode, cIWhCode,
//                                 cfree1, cfree3, targetGoodsPosition, nowIQuantity, endIQuantity, oPositionStock.AutoID);
//                                    txt.AddLogMsg(mes);
//                                }
//                                #endregion
//                            }
//                        }
//                        #endregion
//                    }
//                    #endregion

//                    #region 修改现存量表（如果没有记录需要添加现存量记录）

//                    #region  出库仓库的现存量
//                    //获取该存货的现存量(出库仓库的现存量)
//                    var isnull = false; // 是否有现存量信息，没有新增一条，记录调拨待发数量和在途数量  3   
//                    var owhCodeCollection = U8APIHelper.getCurrentStock(cinvcode, cOWhCode, cfree1, cfree3);
//                    if (owhCodeCollection.Count() < 1)
//                    {
//                        mes = string.Format("未获取到现存量信息,仓库编码:{0}中存货编码:{1}，" +
//                               "颜色(cFree1):{2},商标(cFree3):{3}的现存量不存在", cOWhCode, cinvcode, cfree1, cfree3);
//                        txt.AddLogMsg(mes);
//                        isnull = true;//3
//                        //rsl.Message = mes; 2
//                        //return rsl; 2
//                    }

//                    var oDbCurrentStock = new Models.DbCurrentStock();//4
//                    var nowiQuantity = ""; var nowfTransOutQuantity = ""; var nowfTransInQuantity = "";//4
//                    double endiQuantity = 0.0, endfTransOutQuantity = 0.0, endfTransInQuantity = 0.0;//4

//                    if (isnull)//4
//                    {//4
//                        var cscmId = "";
//                        #region 新增出库所在仓库的现存量信息
//                        #region 查看SCM_Item表中是否存在itemId(没有需要新增)
//                        cscmId = u8Db.Query("SCM_Item")
//                       .Where("cInvCode", "=", cinvcode)
//                       .Where("cFree1", "=", cfree1)
//                       .Where("cFree3", "=", cfree3)
//                       .Select("Id")
//                       .Get<string>().FirstOrDefault();
//                        if (string.IsNullOrWhiteSpace(cscmId))
//                        {
//                            #region 创建SCM_Item数据
//                            var names = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
//                            var item_names = names.GetType().GetProperties().Select(p => p.Name).ToList();
//                            var item_values = names.GetType().GetProperties().Select(p => p.GetValue(names).ToString()).ToList();
//                            var itemList = new List<JObject>();
//                            itemList.Add(body);
//                            var item_list = U8APIHelper.getDataValue(itemList, item_values);
//                            var SCM_Item = u8Db.Query("SCM_Item").Insert(item_names, item_list);
//                            #endregion
//                        }
//                        #endregion
//                        #region 创建现存量信息数据 
//                        //查询SCM_Item数据
//                        cscmId = u8Db.Query("SCM_Item")
//                       .Where("cInvCode", "=", cinvcode)
//                       .Where("cFree1", "=", cfree1)
//                       .Where("cFree3", "=", cfree3)
//                       .Select("Id")
//                       .Get<string>().FirstOrDefault();
//                        if (string.IsNullOrWhiteSpace(cscmId))
//                        {
//                            mes = string.Format("未获取到SCM_Item表中信息,仓库编码:{0}中存货编码:{1}，" +
//                              "颜色(cFree1):{2},商标(cFree3):{3}", cOWhCode, cinvcode, cfree1, cfree3);
//                            txt.AddLogMsg(mes);
//                            rsl.Message = mes;
//                            return rsl;
//                        }
//                        var cnames = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
//                        var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
//                        var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
//                        var citemList = new List<JObject>();
//                        citemList.Add(body);
//                        var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
//                        citem_names.Add("cWhCode");
//                        citem_names.Add("ItemId");
//                        citem_names.Add("iSodid");
//                        citem_names.Add("iQuantity");
//                        citem_names.Add("fTransOutQuantity");
//                        citem_names.Add("fTransInQuantity");
//                        var valueList = citem_list[0].ToList();
//                        valueList.Add(cOWhCode);
//                        valueList.Add(cscmId);
//                        valueList.Add("");
//                        valueList.Add("0");
//                        //valueList.Add(number);
//                        valueList.Add(totalNum); //number->totalNum
//                        valueList.Add("0");
//                        var tcitem_list = new List<IEnumerable<string>>();
//                        tcitem_list.Add(valueList);
//                        dbTable = new DbTable();
//                        dbTable.tableName = "CurrentStock";
//                        dbTable.tableColumns = citem_names;
//                        dbTable.insertValues = tcitem_list;
//                        dbTable.editType = DbTable.otypes.add;
//                        sqlList.Add(dbTable);
//                        #endregion
//                        mes = string.Format("保存后反写出库现存量表(CurrentStock):存货编码：{0}，" +
//                              "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                              "修改前结存数量：{4}，" +
//                              "修改前调拨待发数量：{5}，修改后调拨待发数量：{6}," +
//                              "修改前调拨在途数量：{7}", cinvcode, cOWhCode,
//                              cfree1, cfree3, "0", "0", totalNum,   
//                              "0");
//                        txt.AddLogMsg(mes);
//                        #endregion
//                    }//4
//                    else//4
//                    {
//                        oDbCurrentStock = owhCodeCollection.FirstOrDefault();
//                        //现在结存数量（审核后减少）
//                        nowiQuantity = oDbCurrentStock.iQuantity;
//                        //现在的调拨待发数量(增加)
//                        nowfTransOutQuantity = oDbCurrentStock.fTransOutQuantity;
//                        //现在的调拨在途数量（增加）
//                        nowfTransInQuantity = oDbCurrentStock.fTransInQuantity;
//                        //endiQuantity = Convert.ToDouble(nowiQuantity) - Convert.ToDouble(number);
//                        endiQuantity = Convert.ToDouble(nowiQuantity) - Convert.ToDouble(totalNum);
//                        //endfTransOutQuantity = Convert.ToDouble(nowfTransOutQuantity) + Convert.ToDouble(number);
//                        endfTransOutQuantity = Convert.ToDouble(nowfTransOutQuantity) + Convert.ToDouble(totalNum);  //number->totalNum
//                        endfTransInQuantity = Convert.ToDouble(nowfTransInQuantity);


//                        #region 修改出库所在仓库的现存量信息
//                        whereDic = new Dictionary<string, object>();
//                        whereDic["AutoID"] = oDbCurrentStock.AutoID;
//                        dbTable = new DbTable();
//                        dbTable.tableName = "CurrentStock";
//                        dbTable.updateValue = new { fTransOutQuantity = endfTransOutQuantity };
//                        dbTable.whereDic = whereDic;
//                        dbTable.editType = DbTable.otypes.edit;
//                        sqlList.Add(dbTable);
//                        mes = string.Format("保存后反写出库现存量表(CurrentStock):存货编码：{0}，" +
//                              "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                              "修改前结存数量：{4}，" +
//                              "修改前调拨待发数量：{5}，修改后调拨待发数量：{6}," +
//                              "修改前调拨在途数量：{7},autoid:{8}", cinvcode, cOWhCode,
//                              cfree1, cfree3, nowiQuantity, nowfTransOutQuantity, endfTransOutQuantity,
//                              nowfTransInQuantity, oDbCurrentStock.AutoID);
//                        txt.AddLogMsg(mes);
//                        #endregion

//                    }//4

//                    #region 审核调拨单时修改出库仓库现存量信息
//                    //现在结存数量（减少）
//                    ////现在的调拨待发数量(减少)
//                    //endfTransOutQuantity = endfTransOutQuantity - Convert.ToDouble(number);
//                    endfTransOutQuantity = endfTransOutQuantity - Convert.ToDouble(totalNum);
//                    whereDic = new Dictionary<string, object>();
//                    whereDic["AutoID"] = oDbCurrentStock.AutoID;
//                    dbTable = new DbTable();
//                    dbTable.tableName = "CurrentStock";
//                    dbTable.updateValue = new { iQuantity = endiQuantity, fTransOutQuantity = endfTransOutQuantity };
//                    dbTable.whereDic = whereDic;
//                    dbTable.editType = DbTable.otypes.edit;
//                    auditSqlList.Add(dbTable);
//                    mes = string.Format("审核后反写出库现存量表(CurrentStock):存货编码：{0}，" +
//                          "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                          "修改前结存数量：{4}，修改后结存数量：{5}，" +
//                          "修改前调拨待发数量：{6}，修改后调拨待发数量：{7}," +
//                          "修改前调拨在途数量：{8},autoid:{9}", cinvcode, cOWhCode,
//                          cfree1, cfree3, nowiQuantity, endiQuantity, nowfTransOutQuantity, endfTransOutQuantity,
//                          nowfTransInQuantity, oDbCurrentStock.AutoID);
//                    txt.AddLogMsg(mes);
//                    #endregion

//                    #endregion

//                    #region 入库仓库的现存量信息
//                    var isAdd = false;
//                    var scmId = "";
//                    var iwhCodeCollection = U8APIHelper.getCurrentStock(cinvcode, cIWhCode, cfree1, cfree3);
//                    if (iwhCodeCollection.Count() < 1)
//                    {
//                        #region 查看SCM_Item表中是否存在itemId(没有需要新增)
//                        scmId = u8Db.Query("SCM_Item")
//                       .Where("cInvCode", "=", cinvcode)
//                       .Where("cFree1", "=", cfree1)
//                       .Where("cFree3", "=", cfree3)
//                       .Select("Id")
//                       .Get<string>().FirstOrDefault();
//                        if (string.IsNullOrWhiteSpace(scmId))
//                        {
//                            #region 创建SCM_Item数据
//                            var names = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
//                            var item_names = names.GetType().GetProperties().Select(p => p.Name).ToList();
//                            var item_values = names.GetType().GetProperties().Select(p => p.GetValue(names).ToString()).ToList();
//                            var itemList = new List<JObject>();
//                            itemList.Add(body);
//                            var item_list = U8APIHelper.getDataValue(itemList, item_values);
//                            //dbTable = new DbTable();
//                            //dbTable.tableName = "SCM_Item";
//                            //dbTable.tableColumns = item_names;
//                            //dbTable.insertValues = item_list;
//                            //dbTable.editType = DbTable.otypes.add;
//                            //sqlList.Add(dbTable);
//                            var SCM_Item = u8Db.Query("SCM_Item").Insert(item_names, item_list);
//                            #endregion
//                        }
//                        #endregion
//                        #region 创建现存量信息数据 
//                        //查询SCM_Item数据
//                        scmId = u8Db.Query("SCM_Item")
//                       .Where("cInvCode", "=", cinvcode)
//                       .Where("cFree1", "=", cfree1)
//                       .Where("cFree3", "=", cfree3)
//                       .Select("Id")
//                       .Get<string>().FirstOrDefault();
//                        if (string.IsNullOrWhiteSpace(scmId))
//                        {
//                            mes = string.Format("未获取到SCM_Item表中信息,仓库编码:{0}中存货编码:{1}，" +
//                              "颜色(cFree1):{2},商标(cFree3):{3}", cIWhCode, cinvcode, cfree1, cfree3);
//                            txt.AddLogMsg(mes);
//                            rsl.Message = mes;
//                            return rsl;
//                        }
//                        var cnames = new { cInvCode = "cinvcode", cFree1 = "cfree1", cFree2 = "cfree2", cFree3 = "cfree3", cFree4 = "cfree4" };
//                        var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
//                        var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
//                        var citemList = new List<JObject>();
//                        citemList.Add(body);
//                        var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
//                        citem_names.Add("cWhCode");
//                        citem_names.Add("ItemId");
//                        citem_names.Add("iSodid");
//                        citem_names.Add("iQuantity");
//                        citem_names.Add("fTransOutQuantity");
//                        citem_names.Add("fTransInQuantity");
//                        var valueList = citem_list[0].ToList();
//                        valueList.Add(cIWhCode);
//                        valueList.Add(scmId);
//                        valueList.Add("");
//                        valueList.Add("0");
//                        valueList.Add("0");
//                        //valueList.Add(number);
//                        valueList.Add(totalNum); //number->totalNum
//                        var tcitem_list = new List<IEnumerable<string>>();
//                        tcitem_list.Add(valueList);
//                        dbTable = new DbTable();
//                        dbTable.tableName = "CurrentStock";
//                        dbTable.tableColumns = citem_names;
//                        dbTable.insertValues = tcitem_list;
//                        dbTable.editType = DbTable.otypes.add;
//                        sqlList.Add(dbTable);
//                        #endregion
//                        mes = string.Format("保存后新增入库现存量表(CurrentStock):存货编码：{0}，" +
//                          "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                          "修改前结存数量：{4}，" +
//                          "修改前调拨待发数量：{5}，修改前调拨在途数量：{6}," +
//                          "", cinvcode, cIWhCode,
//                          cfree1, cfree3, "0", "0",
//                          totalNum);
//                        txt.AddLogMsg(mes);
//                        isAdd = true;
//                    }


//                    if (!isAdd)
//                    {
//                        var iDbCurrentStock = iwhCodeCollection.FirstOrDefault();
//                        //现在结存数量（增加）
//                        var inowiQuantity = iDbCurrentStock.iQuantity;
//                        //现在的调拨待发数量()
//                        var inowfTransOutQuantity = iDbCurrentStock.fTransOutQuantity;
//                        //现在的调拨在途数量（审核减少）
//                        var inowfTransInQuantity = iDbCurrentStock.fTransInQuantity;
//                        double iendiQuantity = 0.0, iendfTransOutQuantity = 0.0, iendfTransInQuantity = 0.0;
//                        //iendiQuantity = Convert.ToDouble(inowiQuantity) + Convert.ToDouble(number);
//                        iendiQuantity = Convert.ToDouble(inowiQuantity) + Convert.ToDouble(totalNum);
//                        iendfTransOutQuantity = Convert.ToDouble(inowfTransOutQuantity);
//                        //iendfTransInQuantity = Convert.ToDouble(inowfTransInQuantity) + Convert.ToDouble(number);
//                        iendfTransInQuantity = Convert.ToDouble(inowfTransInQuantity) + Convert.ToDouble(totalNum);

//                        #region  保存时修改入库仓库的现存量数据

//                        whereDic = new Dictionary<string, object>();
//                        whereDic["AutoID"] = iDbCurrentStock.AutoID;
//                        dbTable = new DbTable();
//                        dbTable.tableName = "CurrentStock";
//                        dbTable.updateValue = new { fTransInQuantity = iendfTransInQuantity };
//                        dbTable.whereDic = whereDic;
//                        dbTable.editType = DbTable.otypes.edit;
//                        sqlList.Add(dbTable);
//                        mes = string.Format("保存后反写入库现存量表(CurrentStock):存货编码：{0}，" +
//                              "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                              "修改前结存数量：{4}，" +
//                              "修改前调拨待发数量：{5}," +
//                              "修改前调拨在途数量：{6}，修改后调拨在途数量：{7}，autoid：{8}", cinvcode, cIWhCode,
//                              cfree1, cfree3, inowiQuantity, inowfTransOutQuantity,
//                              inowfTransInQuantity, iendfTransInQuantity, iDbCurrentStock.AutoID);
//                        txt.AddLogMsg(mes);

//                        #endregion

//                        #region 审核调拨单是修改入库仓库现存量信息
//                        if (isAudit.Equals("1"))
//                        {
//                            //iendfTransInQuantity = iendfTransInQuantity - Convert.ToDouble(number);
//                            iendfTransInQuantity = iendfTransInQuantity - Convert.ToDouble(totalNum);
//                            //修改现存量数据
//                            whereDic = new Dictionary<string, object>();
//                            whereDic["AutoID"] = iDbCurrentStock.AutoID;
//                            dbTable = new DbTable();
//                            dbTable.tableName = "CurrentStock";
//                            dbTable.updateValue = new { iQuantity = iendiQuantity, fTransInQuantity = iendfTransInQuantity };
//                            dbTable.whereDic = whereDic;
//                            dbTable.editType = DbTable.otypes.edit;
//                            auditSqlList.Add(dbTable);
//                            mes = string.Format("审核后反写入库现存量表(CurrentStock):存货编码：{0}，" +
//                              "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                              "修改前结存数量：{4}，修改后结存数量：{5}，" +
//                              "修改前调拨待发数量：{6}，" +
//                              "修改前调拨在途数量：{7}，修改后调拨在途数量：{8},autoid:{9}", cinvcode, cIWhCode,
//                              cfree1, cfree3, inowiQuantity, iendiQuantity, inowfTransOutQuantity,
//                              inowfTransInQuantity, iendfTransInQuantity, iDbCurrentStock.AutoID);
//                            txt.AddLogMsg(mes);
//                        }
//                        #endregion
//                    }
//                    else
//                    {
//                        #region 审核调拨单是修改入库仓库现存量信息
//                        if (isAudit.Equals("1"))
//                        {
//                            //修改现存量数据
//                            whereDic = new Dictionary<string, object>();
//                            whereDic["cWhCode"] = cIWhCode;
//                            whereDic["cInvCode"] = cinvcode;
//                            whereDic["cFree1"] = cfree1;
//                            whereDic["cFree3"] = cfree3;
//                            whereDic["ItemId"] = scmId;
//                            dbTable = new DbTable();
//                            dbTable.tableName = "CurrentStock";
//                            //dbTable.updateValue = new { iQuantity = number, fTransInQuantity = 0 };
//                            dbTable.updateValue = new { iQuantity = totalNum, fTransInQuantity = 0 };  //number->totalNum
//                            dbTable.whereDic = whereDic;
//                            dbTable.editType = DbTable.otypes.edit;
//                            auditSqlList.Add(dbTable);
//                            mes = string.Format("审核后反写入库现存量表(CurrentStock):存货编码：{0}，" +
//                              "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                              "修改前结存数量：{4}，修改后结存数量：{5}，" +
//                              "修改前调拨待发数量：{6}，" +
//                              "修改前调拨在途数量：{7}，修改后调拨在途数量：{8}", cinvcode, cIWhCode,
//                              cfree1, cfree3, "0", totalNum, "0",
//                              totalNum, "0");
//                            txt.AddLogMsg(mes);
//                        }
//                        #endregion
//                    }

//                    #endregion

//                    #endregion
//                }
//                //var body_result = u8Db.Query("transvouchs").Insert(body_names, body_list);
//                dbTable = new DbTable();
//                dbTable.tableName = "transvouchs";
//                dbTable.tableColumns = body_names;
//                dbTable.insertValues = body_list;
//                dbTable.editType = DbTable.otypes.add;
//                sqlList.Add(dbTable);
//                var rdAutoId = "";
//                for (int i = 0; i < bodyList.Count; i++)
//                {
//                    #region 调拨单字表数据
//                    var auto_id = (long.Parse(AutoID) + i).ToString().PadLeft(10, '0');

//                    #endregion

//                    if (isAudit.Equals("1"))
//                    {
//                        #region 其他出库子表数据
//                        var b = rd09bodyList[i];
//                        var rd09body_values = rd09bodyList[i].Properties().Select(p => p.Value.ToString()).ToList();
//                        rd09body_values.Add(rd09ID);
//                        var rd09auto_id = (long.Parse(rd09AutoID) + i).ToString().PadLeft(10, '0');
//                        rdAutoId = rd09auto_id;
//                        rd09body_values.Add(rd09auto_id);
//                        rd09body_values.Add(auto_id);
//                        rd09body_values.Add(rd09csysbarcode + "|" + b["irowno"].ToString());
//                        rd09body_list.Add(rd09body_values);
//                        #endregion

//                        #region 检测是否有货位，若有需要往存货货位记录表中添加信息
//                        if (!string.IsNullOrWhiteSpace(b["cposition"].ToString()))
//                        {
//                            var cnames = new
//                            {
//                                cInvCode = "cinvcode",
//                                cFree1 = "cfree1",
//                                cFree2 = "cfree2",
//                                cFree3 = "cfree3",
//                                cFree4 = "cfree4",
//                                iQuantity = "iquantity",
//                                cPosCode = "cposition"
//                            };
//                            var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
//                            var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
//                            var citemList = new List<JObject>();
//                            citemList.Add(b);
//                            var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
//                            citem_names.Add("cWhCode");
//                            citem_names.Add("RdsID");//子表Autoid
//                            citem_names.Add("RdID");//主表ID
//                            citem_names.Add("cHandler");//创建人
//                            citem_names.Add("dDate");//单据日期
//                            citem_names.Add("bRdFlag");//出入库标识
//                            citem_names.Add("cvouchtype");//单据类型
//                            citem_names.Add("dVouchDate");//单据日期
//                            citem_names.Add("iTrackId");
//                            var valueList = citem_list[0].ToList();
//                            valueList.Add(cOWhCode);
//                            valueList.Add(rd09auto_id);
//                            valueList.Add(rd09ID);
//                            valueList.Add(rd09header["cmaker"].ToString());
//                            valueList.Add(rd09header["dDate"].ToString());
//                            valueList.Add(rd09header["brdflag"].ToString());
//                            valueList.Add(rd09header["cvouchtype"].ToString());
//                            valueList.Add(rd09header["dDate"].ToString());
//                            valueList.Add("0");
//                            var tcitem_list = new List<IEnumerable<string>>();
//                            tcitem_list.Add(valueList);
//                            dbTable = new DbTable();
//                            dbTable.tableName = "InvPosition";
//                            dbTable.tableColumns = citem_names;
//                            dbTable.insertValues = tcitem_list;
//                            dbTable.editType = DbTable.otypes.add;
//                            auditSqlList.Add(dbTable);
//                            mes = string.Format("其他出库新增货位存货表信息(InvPosition):存货编码：{0}，" +
//                        "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                        "数量：{4}，" +
//                        "货位：{5}，RdsID：{6},RdID：{7}" +
//                        "", b["cinvcode"].ToString(), cOWhCode,
//                        b["cfree1"].ToString(), b["cfree3"].ToString(), b["iquantity"].ToString(), b["cposition"].ToString(),
//                        rd09auto_id, rd09ID);
//                            txt.AddLogMsg(mes);
//                        }
//                        #endregion
//                    }
//                }
//                #region 其他出库子表数据
//                dbTable = new DbTable();
//                dbTable.tableName = "rdrecords09";
//                dbTable.tableColumns = rd09body_names;
//                dbTable.insertValues = rd09body_list;
//                dbTable.editType = DbTable.otypes.add;
//                auditSqlList.Add(dbTable);
//                #endregion
//                if (isAudit.Equals("1"))
//                {
//                    rdAutoId = (long.Parse(rdAutoId) + 1).ToString().PadLeft(10, '0');
//                }
//                for (int i = 0; i < bodyList.Count; i++)
//                {
//                    #region 调拨单字表数据
//                    var auto_id = (long.Parse(AutoID) + i).ToString().PadLeft(10, '0');

//                    #endregion

//                    if (isAudit.Equals("1"))
//                    {
//                        #region 其他入库子表数据
//                        var b = rd08bodyList[i];
//                        var rd08body_values = rd08bodyList[i].Properties().Select(p => p.Value.ToString()).ToList();
//                        rd08body_values.Add(rd08ID);
//                        var rd08auto_id = (long.Parse(rdAutoId) + i).ToString().PadLeft(10, '0');
//                        rdAutoId = rd08auto_id;
//                        rd08body_values.Add(rd08auto_id);
//                        rd08body_values.Add(auto_id);
//                        rd08body_values.Add(rd08csysbarcode + "|" + b["irowno"].ToString());
//                        rd08body_list.Add(rd08body_values);
//                        #endregion

//                        #region 检测是否有货位，若有需要往存货货位记录表中添加信息
//                        if (!string.IsNullOrWhiteSpace(b["cposition"].ToString()))
//                        {
//                            var cnames = new
//                            {
//                                cInvCode = "cinvcode",
//                                cFree1 = "cfree1",
//                                cFree2 = "cfree2",
//                                cFree3 = "cfree3",
//                                cFree4 = "cfree4",
//                                iQuantity = "iquantity",
//                                cPosCode = "cposition"
//                            };
//                            var citem_names = cnames.GetType().GetProperties().Select(p => p.Name).ToList();
//                            var citem_values = cnames.GetType().GetProperties().Select(p => p.GetValue(cnames).ToString()).ToList();
//                            var citemList = new List<JObject>();
//                            citemList.Add(b);
//                            var citem_list = U8APIHelper.getDataValue(citemList, citem_values);
//                            citem_names.Add("cWhCode");
//                            citem_names.Add("RdsID");//子表Autoid
//                            citem_names.Add("RdID");//主表ID
//                            citem_names.Add("cHandler");//创建人
//                            citem_names.Add("dDate");//单据日期
//                            citem_names.Add("bRdFlag");//出入库标识
//                            citem_names.Add("cvouchtype");//单据类型
//                            citem_names.Add("dVouchDate");//单据日期
//                            citem_names.Add("iTrackId");
//                            var valueList = citem_list[0].ToList();
//                            valueList.Add(cIWhCode);
//                            valueList.Add(rd08auto_id);
//                            valueList.Add(rd08ID);
//                            valueList.Add(rd08header["cmaker"].ToString());
//                            valueList.Add(rd08header["dDate"].ToString());
//                            valueList.Add(rd08header["brdflag"].ToString());
//                            valueList.Add(rd08header["cvouchtype"].ToString());
//                            valueList.Add(rd08header["dDate"].ToString());
//                            valueList.Add("0");
//                            var tcitem_list = new List<IEnumerable<string>>();
//                            tcitem_list.Add(valueList);
//                            dbTable = new DbTable();
//                            dbTable.tableName = "InvPosition";
//                            dbTable.tableColumns = citem_names;
//                            dbTable.insertValues = tcitem_list;
//                            dbTable.editType = DbTable.otypes.add;
//                            auditSqlList.Add(dbTable);
//                            mes = string.Format("其他入库新增货位存货表信息(InvPosition):存货编码：{0}，" +
//                          "仓库编码：{1},cFree1:{2},cFree3:{3}," +
//                          "数量：{4}，" +
//                          "货位：{5}，RdsID：{6},RdID：{7}" +
//                          "", b["cinvcode"].ToString(), cIWhCode,
//                          b["cfree1"].ToString(), b["cfree3"].ToString(), b["iquantity"].ToString(), b["cposition"].ToString(),
//                          rd08auto_id, rd08ID);
//                            txt.AddLogMsg(mes);
//                        }
//                        #endregion
//                    }
//                }
//                #region 其他入库子表数据
//                dbTable = new DbTable();
//                dbTable.tableName = "rdrecords08";
//                dbTable.tableColumns = rd08body_names;
//                dbTable.insertValues = rd08body_list;
//                dbTable.editType = DbTable.otypes.add;
//                auditSqlList.Add(dbTable);
//                #endregion


//                if (sqlList == null || sqlList.Count < 1)
//                {
//                    rsl.Message = "未获取到更新数据(sqlList)";
//                    return rsl;
//                }
//                if (isAudit.Equals("1") && auditSqlList != null && auditSqlList.Count > 0)
//                {
//                    sqlList.InsertRange(sqlList.Count, auditSqlList);
//                }
//                //if (head_result > 0 && body_result > 0)
//                //{
//                rsl = cmd.TransactionSample(sqlList);
//                if (rsl.Result)
//                {
//                    var ms = string.Format("新增调拨单调用结果：true,调拨单单据号：{0},调拨单主表id{1}", cTVCode, ID);
//                    if (isAudit.Equals("1"))
//                    {
//                        ms += string.Format("审核调拨单成功:true，其他出库单单据号{0}，其他出库单主表ID{1}，" +
//                        "其他入库单单据号{2}，其他入库单主表ID{3}", rd09Code, rd09ID, rd08Code, rd08ID);
//                    }
//                    txt.AddLogMsg(ms);
//                    rsl.Result = true;
//                    rsl.Data = cTVCode;
//                    rsl.Message = "【新增】新增调拨单成功";

//                    //DrawBack_cTVCode(cTVCode);
//                    var auto_id = (long.Parse(AutoID) + bodyList.Count - 1).ToString().PadLeft(10, '0');
//                    // 还是需要回写，不回写会报错
//                    U8APIHelper.Set_TransVouch_MainIndex_SubIndex("tr", auto_id);
//                    if (isAudit.Equals("1"))
//                    {
//                        U8APIHelper.Set_TransVouch_MainIndex_SubIndex("rd", rdAutoId);
//                    }
//                    // 审核调拨单
//                    json["ctvcode"] = cTVCode;
//                    //var auditResult = TransVouchAudit(JsonConvert.SerializeObject(json));
//                    //txt.AddLogMsg(string.Format("审核调拨单调用结果：" + auditResult.Result + ",单据号：{0},主表id{1},原因：{2}", cTVCode, ID, auditResult.Message));
//                    //rsl.Message += (",审核调拨单：" + auditResult.Message);
//                }
//                else
//                {
//                    var ms = string.Format("新增调拨单调用结果：false,【新增】调拨单直接入库失败:{0}", rsl.Message);
//                    txt.AddLogMsg(ms);
//                    rsl.Message = ms;
//                }
//            }
//            catch (Exception ex)
//            {
//                rsl.Message = ex.Message;
//            }
//            return rsl;
//        }

//        bool CheckCurrentStock(string proCode, string warehouseCode, string color, string shangbiao, string number)
//        {
//            // 如果是红单，不用判断
//            if (Convert.ToDecimal(number) < 0)
//            {
//                return true;
//            }
//            var u8Db = new Katabase().U8Db();
//            var possibleCollection = u8Db.Query("CurrentStock")
//                .Where("cInvCode", "=", proCode)
//                .Where("cWhCode", "=", warehouseCode)
//                .Where("cfree1", "=", color)
//                .Where("cfree3", "=", shangbiao)
//                .Get<DbCurrentStock>();

//            if (possibleCollection.Count() == 0)
//            {
//                return false;
//            }
//            else
//            {
//                var iquantity = possibleCollection.Sum(p => decimal.Parse(p.iQuantity));
//                if (decimal.Parse(number) <= iquantity)
//                {
//                    return true;
//                }
//            }
//            return false;
//        }

//        Tuple<bool, decimal> CheckCurrentStock_With_iQuantity(string proCode, string warehouseCode, string color, string shangbiao, string number)
//        {
//            // 如果是红单，不用判断
//            if (Convert.ToDecimal(number) < 0)
//            {
//                return new Tuple<bool, decimal>(true, 0.0m);
//            }
//            var u8Db = new Katabase().U8Db();
//            var possibleCollection = u8Db.Query("CurrentStock")
//                .Where("cInvCode", "=", proCode)
//                .Where("cWhCode", "=", warehouseCode)
//                .Where("cfree1", "=", color)
//                .Where("cfree3", "=", shangbiao)
//                .Get<DbCurrentStock>();

//            if (possibleCollection.Count() == 0)
//            {
//                return new Tuple<bool, decimal>(false, 0.0m);
//            }
//            else
//            {
//                var iquantity = possibleCollection.Sum(p => decimal.Parse(p.iQuantity));
//                if (decimal.Parse(number) <= iquantity)
//                {
//                    return new Tuple<bool, decimal>(true, iquantity);
//                }
//                else
//                {
//                    return new Tuple<bool, decimal>(false, iquantity);
//                }
//            }
//            //return false;
//        }
//        public class DbCurrentStock
//        {
//            /// <summary>
//            /// 需求跟踪类型编码
//            /// </summary>
//            public string isotype { get; set; }
//            //需求跟踪类型名称
//            public string enumname { get; set; }
//            //需求跟踪号
//            public string csocode { get; set; }
//            //需求跟踪行号
//            public string isoseq { get; set; }

//            //预留量
//            public string ipeqty { get; set; }
//            //现存量
//            public string iQuantity { get; set; }

//            // 存货自由项1（颜色）
//            public string cfree1 { get; set; }
//        }

//        public class FatherChild
//        {
//            public int iFatherId { get; set; }
//            public int iChildId { get; set; }

//        }

//        public class output
//        {
//            public string iFatherId { get; set; }
//            public string iChildId { get; set; }
//        }
//        void GetIndex_FromProcedure(int childNum, string cVouchType, out string cTVCode, out string fatherId, out string childId)
//        {
//            // 获取单据号
//            var u8Db = new Katabase().U8Db();

//            //var maxCTVCode =
//            //    u8Db
//            //    .Query("VoucherHistory").Where("CardNumber", "0304")
//            //    .Select("cNumber")
//            //    .Get<string>().FirstOrDefault();

//            var maxCTVCode =
//                u8Db.Query("TransVouch").Where("cTVCode", "like", "000%").Max<string>("cTVCode");

//            cTVCode = (string.IsNullOrEmpty(maxCTVCode) ? 1 : long.Parse(maxCTVCode) + 1).ToString().PadLeft(10, '0');

//            // 获取两个id
//            var p = new DynamicParameters();
//            //p.Add("")
//            var sql_temp = @"
//declare @iFatherId int; 
//declare @iChildId int; 
//exec sp_getid 
//@cacc_id= '{0}', 
//@cVouchType='{1}', 
//@iAmount={2},  
//@iFatherId = @iFatherId out, 
//@iChildId=@iChildId out; 
//select @iFatherId iFatherId,@iChildId iChildId;";
//            var sql = string.Format(sql_temp, ConfigReader.Reader["DbName"].Split('_')[1], cVouchType, childNum);

//            var outputList = u8Db.Select<output>(sql);

//            fatherId = (int.Parse(outputList.First().iFatherId) + 1).ToString();
//            childId = (int.Parse(outputList.First().iChildId) + 1).ToString();
//        }

//        void DrawBack_cTVCode(string cTVCode)
//        {
//            var u8Db = new Katabase().U8Db();
//            var cNumber = long.Parse(cTVCode);
//            u8Db.Query("VoucherHistory").Where("CardNumber", "0304").Update(new { cNumber });
//        }

//        void Get_TransVouch_MainIndex_SubIndex(out string mainIndex, out string id, out string subIndex_Start)
//        {
//            var u8Db = new Katabase().U8Db();

//            // 调拨单号
//            var maxMainIndex_Str =
//                u8Db
//                .Query("VoucherHistory").Where("CardNumber", "0304")
//                .Select("cNumber")
//                .Get<string>().FirstOrDefault();
//            var maxMainIndex = string.IsNullOrEmpty(maxMainIndex_Str) ? 1 : long.Parse(maxMainIndex_Str) + 1;
//            var finalMainIndex_Str = maxMainIndex.ToString().PadLeft(10, '0');

//            // 获取父ID，子ID
//            var father_Child = u8Db.Query("UFSystem.dbo.UA_Identity")
//                .Where("cAcc_Id", ConfigReader.Reader["DbName"].Split('_')[1])
//                .Where("cVouchType", "tr").Select("iFatherId", "iChildId").Get<FatherChild>().FirstOrDefault();

//            var iFatherId = Convert.ToString(father_Child.iFatherId);
//            var iChildId = Convert.ToString(father_Child.iChildId);

//            // 父ID
//            var fatherId_value = string.IsNullOrEmpty(iFatherId) ? 1000000001 : 1000000000 + long.Parse(iFatherId) + 1;
//            var fatherId = fatherId_value.ToString().PadLeft(10, '0');

//            // 子表ID（autoID）

//            var childId_value = string.IsNullOrEmpty(iChildId) ? 1000000001 : 1000000000 + long.Parse(iChildId) + 1;
//            var childId = childId_value.ToString().PadLeft(10, '0');

//            mainIndex = finalMainIndex_Str;
//            id = fatherId;
//            subIndex_Start = childId;
//        }

//        void Set_TransVouch_MainIndex_SubIndex(string cTVCode, string iFahterId_input, string iChildId_input)
//        {
//            var cNumber = long.Parse(cTVCode);

//            var iFatherId = long.Parse(iFahterId_input) - 1000000000;
//            var iChildId = long.Parse(iChildId_input) - 1000000000;

//            var u8Db = new Katabase().U8Db();

//            u8Db.Query("VoucherHistory").Where("CardNumber", "0304").Update(new { cNumber });
//            u8Db.Query("UFSystem.dbo.UA_Identity")
//                .Where("cAcc_Id", ConfigReader.Reader["DbName"].Split('_')[1])
//                .Where("cVouchType", "tr").Update(new { iFatherId, iChildId });
//        }
    }

    
    //货位调整
    public partial class U8_WarehouseManagement : WebService
    {
        //public ReturnResult PositionAdjust_Raw(string jsonStr)
        //{
        //    ReturnResult rsl = new ReturnResult();
        //    try
        //    {
        //        var cols = "";
        //        var values = "";

        //        // 调整单号
        //        var cNumber = "";//新增后的流水号
        //        var cVouchCode = "";//新增后的单据号
        //        var ID = "";
        //        var AutoID = "";

        //        var proCode = ""; 
        //        var cFree1 = "";
        //        var cFree3 = "";
        //        var cbposcode = "";  //调整前
        //        var caposcode = "";  //调整后
        //        var iquantity = "";

        //        List<string> sqlList = new List<string>();
        //        var sList = new List<DbTable>();

        //        var json = JsonConvert.DeserializeObject<JObject>(jsonStr);
        //        var header = JsonConvert.DeserializeObject<JObject>(json["Head"].ToString());
        //        var list = JsonConvert.DeserializeObject<List<JObject>>(json["List"].ToString());

        //        #region  自动生成某些列
        //        var CardNumber = "0313";
        //        U8APIHelper.GetIndex_FromProcedure(list.Count, CardNumber, "ad", out cNumber, out cVouchCode, out ID, out AutoID);

        //        //反写流水号调整单
        //        if (cNumber.Equals("1"))
        //        {
        //            U8APIHelper.insertcNumber(CardNumber, cNumber, ref sList);
        //        }
        //        else
        //        {
        //            var upSql = " update VoucherHistory set cNumber='" + cNumber + "' Where  CardNumber='0313' and cContent is NULL";
        //            sqlList.Add(upSql);
        //            txt.AddLogMsg("修改VoucherHistory语句：" + upSql);
        //        }

        //        cols += "cvouchcode,";
        //        values += ("'" + cVouchCode + "',");

        //        // id
        //        cols += "id,";
        //        values += ("'" + ID + "',");

        //        // vt_id
        //        cols += "vt_id,";
        //        values += ("'113',");

        //        // 某个奇怪的编号
        //        var csysbarcode = "||st19|" + cVouchCode;
        //        cols += "csysbarcode,";
        //        values += ("'" + csysbarcode + "',");

        //        #endregion


        //        #region 主单据数据
                
        //        foreach (var obj in header.Properties())
        //        {
        //            cols += (obj.Name.ToString() + ",");
        //            values += ("'" + obj.Value.ToString() + "',");
        //        }

        //        cols = cols.TrimEnd(',');
        //        values = values.TrimEnd(',');

        //        var headsql = @"insert into AdjustPVouch (" + cols + ") VALUES (" + values + ")";
        //        txt.AddLogMsg("表头SQL为：" + headsql);
        //        sqlList.Add(headsql);
        //        #endregion

        //        #region 子单据数据 
                
        //        var wareHouse = header["cwhcode"].ToString();

        //        var i = 0;
        //        foreach (var j in list)
        //        {
        //            var auto_id = (long.Parse(AutoID) - i).ToString().PadLeft(10, '0');

        //            i++;

        //            proCode = j["cinvcode"].ToString();
        //            cFree1 = j["cFree1"].ToString();
        //            cFree3 = j["cFree3"].ToString();
        //            cbposcode = j["cbposcode"].ToString();
        //            caposcode = j["caposcode"].ToString();
        //            iquantity = j["iquantity"].ToString();

        //            #region 判断货位现存量是否够调出
        //            var posiTuple = U8APIHelper.CheckPositionStock_With_iQuantity(proCode, wareHouse, cFree1, cFree3, cbposcode, iquantity);

        //            if (!posiTuple.Item1)
        //            {
        //                var mes = string.Format("调整失败,现存量仅有:{0},仓库编码:{1}中存货编码:{2}，" +
        //              "颜色(cFree1):{3},商标(cFree3):{4},货位:{5}上的现存量不足", posiTuple.Item2, wareHouse, j["cinvcode"].ToString(), j["cFree1"].ToString(), j["cFree3"].ToString(), j["cbposcode"].ToString());
        //                txt.AddLogMsg(mes);
        //                rsl.Message = mes;
        //                return rsl;
        //            }
        //            #endregion

        //            var childCols = "";
        //            var childValues = "";

        //            // 调整单编号
        //            childCols += "cvouchcode,";
        //            childValues += ("'" + cVouchCode + "',");

        //            // 某个奇怪的编号
        //            childCols += "cbsysbarcode,";
        //            childValues += ("'" + csysbarcode + "|" + j["irowno"] + "',");

        //            // id
        //            childCols += "id,";
        //            childValues += ("'" + ID + "',");

        //            // autoid
        //            //var autoId = "1000000001";
        //            //var sql_AutoId = @"select top 1 autoId from AdjustPVouchs 
        //            //            order by autoid desc";
        //            //var tb_autoId = cmd.getData(sql_AutoId);
        //            //if (tb_autoId.Rows.Count != 0)
        //            //{
        //            //    var autoId_value = long.Parse(tb_autoId.Rows[0]["autoid"].ToString());
        //            //    autoId = (autoId_value + 1).ToString();
        //            //}

        //            childCols += "autoid,";
        //            childValues += ("'" + auto_id + "',");

        //            foreach (var obj in j.Properties())
        //            {
        //                childCols += (obj.Name.ToString() + ",");
        //                childValues += ("'" + obj.Value.ToString() + "',");
        //            }

        //            childCols = childCols.TrimEnd(',');
        //            childValues = childValues.TrimEnd(',');

        //            var bodysql = @"insert into AdjustPVouchs (" + childCols + ") VALUES (" + childValues + ")";

        //            txt.AddLogMsg("表体SQL为：" + bodysql);
        //            sqlList.Add(bodysql);

        //            #region 存货货位记录表  调整前、调整后
        //            var sql = " insert into invPosition(RdsID,RdID,cWhCode,cPosCode,cInvCode,cFree1,iQuantity,cHandler,dDate,bRdFlag,cSource,cFree3," +
        //                "iTrackId,iExpiratDateCalcu,cvouchtype,dVouchDate) values ('"+ auto_id + "','"+ID+ "','"+ wareHouse + "','"+cbposcode + "','"+ proCode + "','"+
        //                cFree1 + "','" + iquantity + "','"+ header["cmaker"].ToString() + "'," + "'"+DateTime.Now.ToString("yyyy-MM-dd")+ "','0','货位调整','"+
        //                cFree3 + "','0','0','19','" + DateTime.Now.ToString("yyyy-MM-dd") + "')," +
        //                "('" + auto_id + "','" + ID + "','" + wareHouse + "','" + caposcode + "','" + proCode + "','" +
        //                cFree1 + "','" + iquantity + "','" + header["cmaker"].ToString() + "'," + "'" + DateTime.Now.ToString("yyyy-MM-dd") + "','1','货位调整','" +
        //                cFree3 + "','0','0','19','" + DateTime.Now.ToString("yyyy-MM-dd") + "')";

        //            txt.AddLogMsg("存货货位记录SQL为：" + sql);
        //            sqlList.Add(sql);
        //            #endregion

        //            #region  修改货位现存量 
        //            //发生货位
        //            sql = "update InvPositionSum set iQuantity=iQuantity-" + iquantity + " where iQuantity>0 and cWhCode = '" + wareHouse + "' and cPosCode = '"+cbposcode+ "' and cInvCode = '"+
        //                proCode+ "' and cFree1 = '"+cFree1+ "' and cFree3 = '"+cFree3+"'";
        //            txt.AddLogMsg("修改货位现存量SQL为：" + sql);
        //            sqlList.Add(sql);

        //            //目标货位
        //            var oPositionCollection = U8APIHelper.getPositionStock(proCode, wareHouse, cFree1, cFree3, caposcode);
        //            if (oPositionCollection.Count() < 1)
        //            {
        //                #region 添加货位现存量数据
        //                sql = "insert into InvPositionSum(cWhCode,cPosCode,cInvCode,iQuantity,inum,cBatch,cFree1,cFree2,cFree3,cFree4,cFree5,cFree6,cFree7,cFree8,cFree9,cFree10,iTrackid," +
        //                    "cvmivencode,iExpiratDateCalcu,cInVouchType) values('" + wareHouse + "', '" + caposcode + "', '" + proCode + "', '" + iquantity + "', '0', '', '" + cFree1 + "', '', '" +
        //                    cFree3 + "', '', '', '', '', '', '', '', '0', '', '0', '')";
        //                txt.AddLogMsg("新增货位现存量SQL为：" + sql);
        //                #endregion
        //            }
        //            else
        //            {
        //                #region 修改货位现存量数据
        //                sql = "update InvPositionSum set iQuantity=iQuantity+" + iquantity + " where cWhCode = '" + wareHouse + "' and cPosCode = '" + caposcode + "' and cInvCode = '" +
        //                proCode + "' and cFree1 = '" + cFree1 + "' and cFree3 = '" + cFree3 + "'";
        //                txt.AddLogMsg("修改货位现存量SQL为：" + sql);
        //                #endregion
        //            }
        //            sqlList.Add(sql);
        //            #endregion

        //        }
        //        #endregion

        //        if (sqlList == null || sqlList.Count < 1)
        //        {
        //            rsl.Message = "未获取到更新数据(sqlList)";
        //            return rsl;
        //        }

        //        var result = cmd.TransUpdate(sqlList, "U8");
                
        //        if (result >0 )
        //        {
        //            txt.AddLogMsg("生成货位调整单成功！（" + result.ToString() + "）调整单号：" + cVouchCode);
        //            rsl.Result = true;
        //            rsl.Data = cVouchCode;
        //        }
        //        else
        //        {
        //            rsl.Message = "执行语句错误！（" + result.ToString() + "）";
        //            txt.AddLogMsg(rsl.Message);
        //        }

        //    }
        //    catch (Exception ex)
        //    {
        //        rsl.Message = "异常错误：" + ex.Message;
        //    }
        //    return rsl;
        //}

    }

 

}